He estudiado varios proyectos de Go y hay bastante variación. Puede saber quién viene de C y quién viene de Java, ya que el primero voltea casi todo en el directorio raíz de proyectos en un mainpaquete, y el segundo tiende a colocar todo en un srcdirectorio. Sin embargo, ninguno es óptimo. Cada uno tiene consecuencias porque afectan las rutas de importación y cómo otros pueden reutilizarlas.
Para obtener los mejores resultados, elaboré el siguiente enfoque.
myproj/
main/
mypack.go
mypack.go
Dónde mypack.goestá package mypacky main/mypack.goestá (obviamente) package main.
Si necesita archivos de soporte adicionales, tiene dos opciones. Manténgalos todos en el directorio raíz o coloque archivos de soporte privados en un libsubdirectorio. P.ej
myproj/
main/
mypack.go
myextras/
someextra.go
mypack.go
mysupport.go
O
myproj.org/
lib/
mysupport.go
myextras/
someextra.go
main/
mypack.go
mypage.go
Solo coloque los archivos en un libdirectorio si no están destinados a ser importados por otro proyecto. En otras palabras, si son archivos de soporte privados . Esa es la idea detrás de tener lib--para separar las interfaces públicas de las privadas.
Hacer las cosas de esta manera le dará una buena ruta de importación, myproj.org/mypackpara reutilizar el código en otros proyectos. Si lo usa lib, los archivos de soporte interno tendrán una ruta de importación que es indicativa de eso myproj.org/lib/mysupport,.
Al construir el proyecto, use main/mypack, por ejemplo go build main/mypack. Si tiene más de un ejecutable, también puede separarlos mainsin tener que crear proyectos separados. por ejemplo main/myfoo/myfoo.goy main/mybar/mybar.go.