Sangría en Go: ¿tabulaciones o espacios?

125

¿Existe un documento de convenciones de codificación estándar de Google Go en algún lugar que establezca si se prefieren las pestañas o los espacios para la sangría en el código fuente de Go? Si no es así, ¿cuál es la opción (estadísticamente) más popular?

  1. ¿Cuál es la recomendación oficial? (Si alguna)
  2. ¿Cuál es la opción más popular?
Erik Kaplun
fuente
2
medium.com/@hoffa/…
Brad Werth

Respuestas:

195

La recomendación oficial es formatear su código con

go fmt

o usando el comando gofmt directamente

gofmt -w .

Puede leer más sobre esto aquí en el blog de golang.org, o en el documento Effective go :

Sangría
Usamos pestañas para sangrar y gofmt las emite por defecto. Utilice espacios solo si es necesario.

ANiso
fuente
59
OK, así que pestañas.
Erik Kaplun
1
Sí, las pestañas para sangría es la recomendación oficial. Usted puede utilizar el espacio muesca como señala @Intermernet, pero no es la recomendación.
ANisus
19
@ErikAllik, en realidad, la posición oficial no es "usar pestañas" sino "usar go fmten su código antes de enviarlo" (tenga en cuenta que también hay gofmt). Lo que estoy tratando de explicar es que Go hizo esto bien no simplemente declarando una política, sino adoptando una herramienta que la aplica. Esto es poco común, así que intente inclinar la cabeza en torno a esta idea y adopte go fmt. Tenga en cuenta que incluso hay soluciones automatizadas (por ejemplo, el complemento oficial de Go para Vim admite el :Fmtcomando, IIRC).
kostix
2
Creo que vale la pena señalar que adoptar / requerir una herramienta no detiene todos los argumentos, pero sí significa que en lugar de que la gente se enoje contigo por tus elecciones obstinadas, la gente se enoja contigo por aceptar la herramienta (y con los fabricantes de herramientas por sus opciones obstinadas).
mtraceur
22

EDICIÓN 2: la respuesta original en la parte inferior ahora es incorrecta. La sección correcta del archivo fuente vinculado (actual 30/12/2019) es:

Formatos Gofmt Programas Go. Utiliza pestañas para la sangría y espacios en blanco para la alineación. La alineación supone que un editor utiliza una fuente de ancho fijo.

¡Gracias a TehSphinX por señalar esto!

TODA LA INFORMACIÓN DEBAJO DE ESTA LÍNEA AHORA ES INCORRECTA

EDITAR: La respuesta original en la parte inferior ahora es incorrecta. La sección correcta del archivo fuente vinculado (actual 25/07/2014) es:

Formatos Gofmt Programas Go.
Utiliza pestañas (ancho = 8) para la sangría y espacios en blanco para la alineación.

Respuesta original (obsoleta):

Formatting control flags:
    -comments=true
        Print comments; if false, all comments are elided from the output.
    -tabs=true
        Indent with tabs; if false, spaces are used instead.
    -tabwidth=8
        Tab width in spaces.
Intermernet
fuente
4
-tabsy -tabwidthse han ido (y -commentsya no está documentado al menos; no he mirado más de cerca)
William
2
@billisphere Gracias, he actualizado la respuesta con la sección relevante del archivo vinculado.
Intermernet
5
Cuando utiliza caracteres de tabulación, no existe el uso de un ancho de tabulación en particular, por lo que la opción de ancho de tabulación (anterior) no tiene ningún efecto y la parte "ancho = 8" del texto actualizado debe eliminarse. El ancho de tabulación se configura en el visor . Este error también existe en la fuente vinculada.
thomasrutter
2
Esto está desactualizado. No se menciona más el ancho de tabulación en la documentación del gofmtcomando. Se ha eliminado aquí: github.com/golang/go/commit/…
TehSphinX