Чтобы правильно использовать пакет, как организовать каталог, имя файла, unit test файл?
Дерево исходных файлов выглядит следующим образом:
/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)
...
}
Мои вопросы:
- Связано ли имя пакета с именем каталога, именем исходного файла?
- Если для пакета есть только один исходный файл, нужно ли его поместить в каталог?
- Должен ли я помещать foo.go и foo_test.go в тот же пакет?
- В foo_test.go, так как он в том же пакете, что и foo.go, я не импортировал foo. Но когда я компилирую foo_test.go с 6g, он говорит, что bar() - undefined. Что мне делать?
Ответы
Ответ 1
1 - Спецификация языка говорит следующее:
Набор файлов, имеющих одно и то же PackageName, представляет собой реализацию пакета. Реализация может потребовать, чтобы все исходные файлы для пакета находились в одном каталоге.
Таким образом, кажется, что нет требования при именовании файлов/каталогов, но было бы безопаснее поместить весь файл, который формирует пакет в одном каталоге.
2 - Очевидно, файл должен находиться в некотором каталоге. Я предполагаю, что вы имеете в виду "должен ли я помещать его в подкаталог src
?"? Мне кажется, на основе приведенной цитаты, что вы могли бы иметь все ваши файлы в src
напрямую, если хотите.
3 - Да.
4 - Используйте go test