Я изучил несколько проектов Go, и есть немало вариантов. Вы можете сказать, кто приходит из C, а кто из Java, так как первый из них создает дамп практически всего в корневом каталоге проектов в пакете main
, а последний обычно помещает все в каталог src
. Ни то, ни другое не является оптимальным. У каждого есть последствия, потому что они влияют на пути импорта и то, как другие могут их использовать.
Чтобы получить наилучшие результаты, я разработал следующий подход.
myproj/
main/
mypack.go
mypack.go
Где mypack.go
равно package mypack
, а main/mypack.go
(очевидно) package main
.
Если вам нужны дополнительные файлы поддержки, у вас есть два варианта. Либо храните их все в корневом каталоге, либо поместите файлы поддержки private в подкаталог lib
. Э.Г.
myproj/
main/
mypack.go
myextras/
someextra.go
mypack.go
mysupport.go
Или
myproj.org/
lib/
mysupport.go
myextras/
someextra.go
main/
mypack.go
mypage.go
Помещайте файлы в каталог lib
, только если они не предназначены для импорта другим проектом. Другими словами, если они являются закрытыми файлами поддержки. В этом и заключается идея lib
- отделять общедоступные и частные интерфейсы.
Выполнение этих действий даст вам хороший путь импорта myproj.org/mypack
для повторного использования кода в других проектах. Если вы используете lib
, то внутренние файлы поддержки будут иметь путь импорта, который указывает на это, myproj.org/lib/mysupport
.
При создании проекта используйте main/mypack
, например. go build main/mypack
. Если у вас есть более одного исполняемого файла, вы также можете отделить его под main
, не создавая отдельные проекты. например main/myfoo/myfoo.go
и main/mybar/mybar.go
.