¿Cuáles son las convenciones para los nombres de archivo en Go?

114

Pude encontrar las convenciones para nombrar paquetes en Go: sin subrayado entre palabras, todo en minúsculas.

¿Esta convención se aplica también a los nombres de archivo?

¿También coloca una estructura en un archivo como si lo hiciera para una clase java y luego nombra el archivo después de la estructura?

Actualmente, si tengo una estructura WebServer, la guardo en un archivo web_server.go.

david
fuente
3
AFAIK, no hay convención, pero los sufijos _ pueden tener una semántica especial en el futuro, así que recomiendo evitarlos.
fuz

Respuestas:

126

Hay algunas pautas a seguir.

  1. Nombres de archivo que comienzan con "." o "_" son ignorados por la herramienta Go
  2. Los archivos con el sufijo _test.gosolo los compila y ejecuta la go testherramienta.
  3. Los archivos con sufijos específicos de arquitectura y sistema operativo siguen automáticamente esas mismas restricciones, por ejemplo name_linux.go, solo se construirán en linux, name_amd64.gosolo se construirán en amd64. Esto es lo mismo que tener una //+build amd64línea en la parte superior del archivo.

Consulte los documentos de la go buildherramienta para obtener más detalles: https://golang.org/pkg/go/build/

JimB
fuente
3
¿Dónde está esto documentado? ¡Gracias!
Abhijeet Rastogi
2
@AbhijeetRastogi: golang.org/pkg/go/build y golang.org/cmd/go
JimB
3
Qué debo hacer si quiero construir para unixy others. Por ejemplo, puedo hacer dos archivos file_windows.goy file_others.go. Funciona bien. Pero para file_unix.goy file_others.gono funciona. No quiero crear ocho archivos darwin freebsg linux openbsd netbsd dragonfly solaris android.
Ivan Black
3
@Fire: los nombres de archivo generalmente están todos en minúsculas en mayúsculas, tanto por coherencia como para sistemas con sistemas de archivos que no distinguen entre mayúsculas y minúsculas.
JimB
1
Para cualquiera que tenga la misma pregunta que @IvanBlack, esto se puede lograr usando etiquetas de compilación. Vea aquí una buena descripción general de cómo hacerlo: dave.cheney.net/2013/10/12/…
Ian Gustafson
30

Además de la respuesta proporcionada por JimB , los nombres de los archivos normales son minúsculas, cortos y sin ningún tipo de subrayado o espacio. Generalmente, los nombres de archivo siguen la misma convención que los nombres de paquetes. Ver los nombres de los paquetes sección de Effective Go .

Consulte el paquete strconv para ver un buen ejemplo.

Zamicol
fuente
3
¿Qué nombre le daría a los archivos largos? mycommandsub1command.goo my_command_sub1command.go, y qué talmycommandVO
user2727195
9
Sugeriría guiones bajos para nombres largos. Lo he visto en algunos buenos proyectos.
Avi
17

Go es bastante liberal en términos de cómo organiza su código dentro de un paquete, generalmente es lo que mejora la legibilidad y la comprensión de su código. La mejor manera de aprender cómo se hace esto es estudiar los maestros, es decir, echar un vistazo a la biblioteca estándar:

http://golang.org/src/pkg/

Sin embargo, hay 2 reglas en las que puedo pensar. Al especificar el código que se compilará para diferentes plataformas, utilice el nombre de la plataforma como sufijo:

mypkg_linux.go         // only builds on linux systems
mypkg_windows_amd64.go // only builds on windows 64bit platforms

Además, si tiene un archivo llamado server.go, las pruebas para ese archivo estarán en formato server_test.go.

Matt Harrison
fuente
1
¡Supongo que no usarán _front, _writero _bitscomo sufijos significativos en el futuro entonces!
Matt Harrison
Me encanta Go, pero la goherramienta es muy restrictiva en cuanto a la estructura del paquete (es una de mis cosas favoritas del idioma). Favorece algunas convenciones muy específicas (un paquete por carpeta [con al menos una excepción], el paquete de la carpeta comparte el mismo nombre que la carpeta [con al menos una excepción], la ruta de importación completa del paquete coincide con la ruta relativa desde $GOPATH, algunos archivos son tratado de manera diferente según el formato de su nombre, etc.)
weberc2
1
@ weberc2 Las restricciones son análogas a Latex. Primero, quería controlar mi diseño y otros detalles irrelevantes, hasta que me di cuenta de que todo lo que hay que escribir es buen contenido. De manera similar, Go nos permite escribir un buen código y maneja otros detalles por nosotros.
David
@david estoy de acuerdo. En retrospectiva, no estaba claro: estaba respondiendo a la declaración del respondedor Go is quite liberal in terms of how you organise your code within a package. Go no es liberal, es bastante restrictivo. Pero eso es bueno.
weberc2
8

Por lo general, el subrayado en los nombres de archivo se usa para asignar código de plataforma / solo arco, por ejemplo:

 cd $GOROOT/src/pkg/math/
 ls sqrt*s
sqrt_386.s  sqrt_amd64p32.s  sqrt_amd64.s  sqrt_arm.s

sqrt_386.ssolo será leído por el compilador en procesadores de 32 bits, sqrt_amd64.sen amd64, etc.

Puede ser cualquiera de los valores válidos de GOOSy / o GOARCH( ref .

file_windows_amd64.go solo se compilará en win64.

Uno de uno
fuente