Estudei vários projetos Go e há uma boa variação. Você pode dizer quem vem de C e quem vem de Java, pois o primeiro despeja quase tudo no diretório raiz do projeto em um mainpacote e o último tende a colocar tudo em um srcdiretório. Nem é ideal, no entanto. Cada um tem consequências porque afeta os caminhos de importação e como os outros podem reutilizá-los.
Para obter os melhores resultados, elaborei a seguinte abordagem.
myproj/
main/
mypack.go
mypack.go
Onde mypack.goestá package mypacke main/mypack.goestá (obviamente) package main.
Se você precisar de arquivos de suporte adicionais, terá duas opções. Mantenha todos eles no diretório raiz ou coloque os arquivos de suporte privado em um libsubdiretório. Por exemplo
myproj/
main/
mypack.go
myextras/
someextra.go
mypack.go
mysupport.go
Ou
myproj.org/
lib/
mysupport.go
myextras/
someextra.go
main/
mypack.go
mypage.go
Coloque os arquivos em um libdiretório apenas se eles não forem importados por outro projeto. Em outras palavras, se eles são arquivos de suporte particulares . Essa é a idéia por trás de ter lib- para separar interfaces públicas de privadas.
Fazer as coisas dessa maneira fornecerá um bom caminho de importação myproj.org/mypackpara reutilizar o código em outros projetos. Se você usar lib, os arquivos de suporte interno terão um caminho de importação indicativo disso myproj.org/lib/mysupport,.
Ao construir o projeto, use main/mypack, por exemplo go build main/mypack. Se você tiver mais de um executável, também poderá separá-los mainsem precisar criar projetos separados. por exemplo, main/myfoo/myfoo.goe main/mybar/mybar.go.