Чтобы правильно использовать пакет, как расположить каталог, имя файла, файл модульного теста? - PullRequest
13 голосов
/ 02 февраля 2010

Мое дерево исходных файлов выглядит так:

/src
  /pkg
    /foo
      foo.go
      foo_test.go

Внутри foo.go:

package foo

func bar(n int) {
    ...
}

внутри foo_test.go:

package foo

func testBar(t *testing.T) {
    bar(10)
    ...
}

Мои вопросы:

  1. Относится ли имя пакета к имени каталога, имени исходного файла?
  2. Если для пакета существует только один исходный файл, нужно ли мне поместить его в каталог?
  3. Стоит ли помещать foo.go и foo_test.go в один и тот же пакет?
  4. В foo_test.go, поскольку он находится в том же пакете, что и foo.go, я не импортировал foo. Но когда я компилирую foo_test.go с 6g, он говорит, что bar () не определена. Что мне делать?

1 Ответ

8 голосов
/ 02 февраля 2010

1 - Спецификация языка говорит следующее:

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

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

2 - Очевидно, файл должен находиться в некотором каталоге. Я предполагаю, что вы имеете в виду " я должен поместить его в подкаталог src?" Исходя из вышеприведенной цитаты, мне кажется, что вы можете иметь все свои файлы непосредственно в src, если действительно хотите.

3 - Да.

4 - Использование go test

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...