Я изучил несколько проектов 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.