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 main
pacote e o último tende a colocar tudo em um src
diretó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.go
está package mypack
e main/mypack.go
está (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 lib
subdiretó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 lib
diretó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/mypack
para 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 main
sem precisar criar projetos separados. por exemplo, main/myfoo/myfoo.go
e main/mybar/mybar.go
.