Indentation dans Go: tabulations ou espaces?

125

Existe-t-il un document de conventions de codage Google Go standard quelque part qui définit si les tabulations ou les espaces sont préférés pour l'indentation dans le code source Go? Sinon, quelle est l'option (statistiquement) la plus populaire?

  1. Quelle est la recommandation officielle? (si seulement)
  2. Quel est le choix le plus populaire?
Erik Kaplun
la source
2
medium.com/@hoffa/…
Brad Werth

Réponses:

195

La recommandation officielle consiste à formater votre code avec

go fmt

ou en utilisant directement la commande gofmt

gofmt -w .

Vous pouvez en savoir plus ici sur le blog golang.org ou dans le document Effective go :

Indentation
Nous utilisons des tabulations pour l'indentation et gofmt les émet par défaut. N'utilisez des espaces que si vous le devez.

ANisus
la source
59
OK, donc les onglets.
Erik Kaplun
1
Oui, les onglets pour l'indentation sont la recommandation officielle. Vous pouvez utiliser l'indentation d'espace comme le souligne @Intermernet, mais ce n'est pas la recommandation.
ANisus
19
@ErikAllik, en fait, la position officielle n'est pas "utiliser les onglets" mais plutôt "utiliser go fmtsur votre code avant de le soumettre" (notez qu'il y en a aussi gofmt). Ce que j'essaie de dire, c'est que Go a bien fait non pas simplement en déclarant une politique, mais en adoptant un outil qui la met en application. C'est rare, alors essayez de plier la tête autour de cette idée et de l'adopter go fmt. Notez qu'il existe même des solutions automatisées (par exemple, le plugin officiel Go pour Vim prend en charge la :Fmtcommande, IIRC).
kostix
2
Je pense qu'il vaut la peine de noter qu'adopter / exiger un outil n'arrête pas tous les arguments, mais cela signifie qu'au lieu que les gens se fâchent contre vous pour vos choix avisés, les gens se fâchent contre vous pour avoir accepté l'outil (et contre les fabricants d'outils pour leurs choix avisés).
mtraceur
22

EDIT 2: la réponse originale en bas est maintenant incorrecte. La section correcte du fichier source lié (30/12/2019 actuel) est:

Gofmt formate les programmes Go. Il utilise des tabulations pour l'indentation et des blancs pour l'alignement. L'alignement suppose qu'un éditeur utilise une police à largeur fixe.

Merci à TehSphinX pour l'avoir signalé!

TOUTES LES INFORMATIONS SOUS CETTE LIGNE SONT MAINTENANT INCORRECTES

EDIT: La réponse originale en bas est maintenant incorrecte. La section correcte du fichier source lié (actuel 25/07/2014) est:

Gofmt formate les programmes Go.
Il utilise des tabulations (largeur = 8) pour l'indentation et des blancs pour l'alignement.

Réponse d'origine (obsolète):

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
la source
4
-tabset -tabwidthsont partis (et -commentsn'est plus documenté au moins; je n'ai pas regardé de plus près)
William
2
@billisphere Merci, j'ai mis à jour la réponse avec la section correspondante du fichier lié.
Intermernet
5
Lorsque vous utilisez des caractères de tabulation, il n'est pas possible d'utiliser une largeur de tabulation particulière, donc l'option (ancienne) tabwidth n'a aucun effet et la partie "width = 8" du texte mis à jour doit être supprimée. La largeur de tabulation est configurée dans le visualiseur . Cette erreur existe également dans la source liée.
thomasrutter
2
C'est obsolète. Il n'y a plus de mention d'un tabwidth dans la documentation de la gofmtcommande. Il a été supprimé ici: github.com/golang/go/commit/…
TehSphinX