Einrückung in Go: Tabulatoren oder Leerzeichen?

125

Gibt es irgendwo ein Standarddokument für Google Go-Codierungskonventionen, in dem festgelegt wird, ob Tabulatoren oder Leerzeichen für die Einrückung im Go-Quellcode bevorzugt werden? Wenn nicht, welche Option ist (statistisch) beliebter?

  1. Was ist die offizielle Empfehlung? (wenn überhaupt)
  2. Was ist die beliebteste Wahl?
Erik Kaplun
quelle
2
medium.com/@hoffa/…
Brad Werth

Antworten:

195

Die offizielle Empfehlung lautet, Ihren Code mit zu formatieren

go fmt

oder direkt mit dem Befehl gofmt

gofmt -w .

Weitere Informationen finden Sie hier im Blog von golang.org oder im Dokument " Effective go" :

Einrückung
Wir verwenden Registerkarten zum Einrücken und gofmt gibt sie standardmäßig aus. Verwenden Sie Leerzeichen nur, wenn Sie müssen.

ANisus
quelle
58
OK, also Tabs ist es.
Erik Kaplun
1
Ja, Tabulatoren für Einrückungen sind die offizielle Empfehlung. Sie können Leerzeicheneinrückungen verwenden, wie @Intermernet hervorhebt, dies ist jedoch nicht die Empfehlung.
ANisus
19
@ErikAllik, eigentlich ist die offizielle Position nicht "Tabs verwenden", sondern "Verwenden Sie go fmtIhren Code vor dem Absenden" (beachten Sie, dass es auch gibt gofmt). Was ich versuche, ist, dass Go dies richtig gemacht hat , indem er nicht nur eine Richtlinie deklariert, sondern ein Tool eingeführt hat, das sie durchsetzt. Dies ist ungewöhnlich, also versuchen Sie, Ihren Kopf um diese Idee zu beugen und zu übernehmen go fmt. Beachten Sie, dass es sogar automatisierte Lösungen gibt (zum Beispiel unterstützt das offizielle Go-Plugin für Vim den :FmtBefehl IIRC).
Kostix
2
Ich denke, es ist erwähnenswert, dass die Übernahme / Anforderung eines Werkzeugs nicht alle Argumente aufhält, aber es bedeutet, dass die Leute nicht wütend auf Sie werden, wenn Sie sich für eine Meinung entscheiden, sondern wütend auf Sie, wenn Sie das Werkzeug akzeptieren (und auf die Werkzeughersteller für ihre meinungsgebundenen Entscheidungen).
mtraceur
22

EDIT 2: Die ursprüngliche Antwort unten ist jetzt falsch. Der richtige Abschnitt der verknüpften Quelldatei (aktuell 30/12/2019) lautet:

Gofmt-Formate Go-Programme. Es werden Registerkarten zum Einrücken und Leerzeichen zum Ausrichten verwendet. Bei der Ausrichtung wird davon ausgegangen, dass ein Editor eine Schriftart mit fester Breite verwendet.

Vielen Dank an TehSphinX für diesen Hinweis!

Alle Informationen unter dieser Zeile sind jetzt falsch

BEARBEITEN: Die ursprüngliche Antwort unten ist jetzt falsch. Der korrekte Abschnitt der verknüpften Quelldatei (aktuell 25.07.2014) lautet:

Gofmt-Formate Go-Programme.
Es werden Registerkarten (Breite = 8) zum Einrücken und Leerzeichen zum Ausrichten verwendet.

Ursprüngliche Antwort (veraltet):

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.
Internet
quelle
4
-tabsund -tabwidthsind weg (und -commentssind zumindest nicht mehr dokumentiert; haben nicht genauer hingeschaut)
William
2
@billisphere Danke, ich habe die Antwort mit dem entsprechenden Abschnitt der verknüpften Datei aktualisiert.
Intermernet
5
Wenn Sie Tabulatorzeichen verwenden, kann keine bestimmte Tabulatorbreite verwendet werden. Daher hat die Option (frühere) Tabulatorenbreite keine Auswirkung und der Teil "width = 8" des aktualisierten Textes sollte entfernt werden. Die Tabulatorbreite wird im Viewer konfiguriert Dieser Fehler existiert auch in der verknüpften Quelle.
Thomasrutter
2
Das ist veraltet. In der Dokumentation des gofmtBefehls wird keine Tab-Breite mehr erwähnt . Es wurde hier entfernt: github.com/golang/go/commit/…
TehSphinX