Я изучил несколько проектов Go, и есть немало вариантов. Вы можете сказать, кто идет из C, а кто из Java, поскольку первый дамп почти всего в корневом каталоге проектов в main
пакете, а второй, как правило, помещает все в src
каталог. Ни то, ни другое не является оптимальным. У каждого есть последствия, потому что они влияют на пути импорта и то, как другие могут их использовать.
Чтобы получить наилучшие результаты, я разработал следующий подход.
myproj/
main/
mypack.go
mypack.go
Где mypack.go
находится package mypack
и main/mypack.go
(очевидно) package main
.
Если вам нужны дополнительные файлы поддержки, у вас есть два варианта. Либо храните их все в корневом каталоге, либо поместите частные файлы поддержки в 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
.