Когда я должен экспортировать функцию / переменную / константу в Golang? [Дубликат]

My java Solution

  public int compareVersion (String version1, String version2) {String [] first = version1.split ("\\.");  String [] second = version2.split ("\\.");  int len ​​= first.length & lt; = second.length?  first.length: second.length;  // цикл выполняется в зависимости от того, какая короткая версия двух строк для (int i = 0; i & lt; len; i ++) {int firstInt = Integer.parseInt (first [i]);  int secondInt = Integer.parseInt (второй [i]);  if (firstInt & lt; secondInt) {return -1;  } else if (firstInt & gt; secondInt) {return 1;  }} // ниже двух условий проверьте, является ли длина не одинаковой // если длина первой строки коротка, тогда начинайте с первой строки и сравнивайте ее со вторым строковым значением.  второе строковое значение не равно нулю, что означает, что оно больше.  if (first.length & lt; second.length) {для (int i = first.length; i & lt; second.length; i ++) {int secondInt = Integer.parseInt (второй [i]);  if (secondInt! = 0) {return -1;  }}} // аналогичная логика, как указано выше, только эта первая длина на этот раз больше.  else if (first.length & gt; second.length) {для (int i = second.length; i & lt; first.length; i ++) {int firstInt = Integer.parseInt (first [i]);  if (firstInt! = 0) {return 1;  }}} // return 0, если оба строкового значения одинаковы с возвратом 0;  }  
4
задан darkfeline 31 July 2014 в 03:55
поделиться

4 ответа

Я склонен использовать имена, используемые в нескольких разных файлах, и оставлять их строчными буквами, если они представляют интерес только для местного населения.

0
ответ дан andybalholm 15 August 2018 в 23:42
поделиться

Короткий ответ: это не имеет значения. Возможно, на уровне сборки может быть выставлен указатель; но это не было указано.

И на самом деле, комментарии ошибочны в отношении godoc и публичных (столичных) писем. Для исполняемых файлов (основная часть пакета), godoc печатает только описание заголовка пакета //. Он не будет печатать какие-либо методы. Я пробовал это недавно и задавался вопросом, где была вся моя документация.

Вместо этого, что люди делают для приложений package main, это добавить файл с именем doc.go в свой пакет. Поскольку спецификация godoc позволяет вам украшать package main в любом месте любого файла, вы должны записать всю свою документацию здесь, в этом файле doc.go, например:

/* This executable serves a special purpose 
and that is say Hello World when it is run.

A tip for writing comments in go is to use 
line-break, text, line-break to make headers, 
like this.

This Is A Header

And the sub-text to the header goes here.

Also note that you can create indented 
code with 4 spaces...

   Like this.
   And this.

And the above will be printed as code
blocks in -html output.

*/
package main

Обратите внимание, что текст выше украшает package main в конце файла. Это весь текст в этом проекте doc.go.

Когда вы запустите go doc ., он будет читать этот файл для вывода.

Кроме того, при запуске основного приложения и используйте -h или -help, этот текст также отображается на консоли. Сделайте это так же тщательно, как вам нравится, чтобы помочь пользователям.

Изменить: как упоминает Джеймс, да, вы можете импортировать другие основные пакеты. Но это отступает от идиоматического характера Go в первую очередь. Документы в Go даже говорят, что дублирующий код, в интересах удобочитаемости, отлично подходит. Это было тяжело и для проглатывания, исходя из .NET и использования DRY-принципов.

1
ответ дан eduncan911 15 August 2018 в 23:42
поделиться

Хотя это необычно, можно импортировать пакет с именем main из другого пакета. Рассмотрим следующие файлы в рабочей области Go:

src/foo/foo.go:

package main

import "fmt"

func Doit() {
    fmt.Println("Doit() called")
}

func main() {
    fmt.Println("Calling Doit from foo")
    Doit()
}

src/bar/bar.go:

package main

import (
    "fmt"
    foo "foo"
)

func main() {
    fmt.Println("Calling Doit from bar")
    foo.Doit()
}

Я могу построить эти две программы как обычно, и bar может вызывать экспортированную функцию из пакета bar. Если это не было экспортировано, это было бы невозможно.

Это, очевидно, надуманный пример, но это может быть полезно, если у вас есть коллекция связанных программ, которые вы хотите скомпилировать. Очевидно, что было бы проще разделить общий код на отдельный пакет, не названный main.

0
ответ дан James Henstridge 15 August 2018 в 23:42
поделиться

Я спросил у Discord Gophers , и у Gopher Herder @LethalClips#4645 был подходящий ответ для меня.

Обычно вы будете экспортировать вещи только в основной пакет когда вам нужно, чтобы их читали извне библиотеки, такие как encoding/json, так как вы не хотите вручную импортировать основной пакет.

Этот ответ помог мне разобраться. Если он доступен библиотекой, экспортируйте его.

0
ответ дан NatoBoram 15 August 2018 в 23:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: