¿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.


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/


3
¿Dónde está esto documentado? ¡Gracias!
— Abhijeet Rastogi


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.


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.



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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.