Wcięcie w Go: tabulatory czy spacje?

125

Czy istnieje gdzieś standardowy dokument konwencji kodowania Google Go, który określa, czy tabulatory lub spacje są preferowane do wcięć w kodzie źródłowym Go? Jeśli nie, jaka jest (statystycznie) bardziej popularna opcja?

  1. Jaka jest oficjalna rekomendacja? (Jeśli w ogóle)
  2. Jaki jest bardziej popularny wybór?
Erik Kaplun
źródło
2
medium.com/@hoffa/…
Brad Werth

Odpowiedzi:

195

Oficjalne zalecenie to formatowanie kodu za pomocą

go fmt

lub bezpośrednio używając polecenia gofmt

gofmt -w .

Możesz przeczytać więcej na ten temat tutaj na blogu golang.org lub w dokumencie Effective go :

Wcięcia
Używamy zakładek do wcięć i gofmt domyślnie je emituje. Używaj spacji tylko wtedy, gdy musisz.

ANisus
źródło
59
OK, więc zakładki to jest.
Erik Kaplun
1
Tak, zakładki do wcięć to oficjalne zalecenie. Państwo może używać spacji wcięcia jak @Intermernet zwraca uwagę, ale nie jest to zalecane.
ANisus,
19
@ErikAllik, właściwie, oficjalne stanowisko to nie „używaj tabulatorów”, ale raczej „używaj go fmtna swoim kodzie przed przesłaniem go” (pamiętaj, że jest też gofmt). To, co próbuję pokazać, to to, że Go zrobił to dobrze, nie tylko deklarując politykę, ale przyjmując narzędzie, które ją wymusza. Jest to rzadkie, więc spróbuj pochylić głowę nad tym pomysłem i go przyjąć go fmt. Zauważ, że istnieją nawet zautomatyzowane rozwiązania (na przykład oficjalna wtyczka Go do Vima obsługuje :Fmtpolecenie IIRC).
kostix
2
Myślę, że warto zauważyć, że przyjęcie / wymaganie narzędzia nie powstrzymuje wszystkich argumentów, ale oznacza to, że zamiast wściekać się na ciebie za twoje uparte wybory, ludzie wściekają się na ciebie za zaakceptowanie narzędzia (i na twórców narzędzi za ich uparte wybory).
mtraceur
22

EDYCJA 2: oryginalna odpowiedź na dole jest teraz niepoprawna. Prawidłowa sekcja połączonego pliku źródłowego (stan na 30.12.2019) to:

Gofmt formatuje programy Go. Używa tabulatorów do wcięć i spacji do wyrównywania. Wyrównanie zakłada, że ​​redaktor używa czcionki o stałej szerokości.

Dzięki TehSphinX za wskazanie tego!

WSZYSTKIE INFORMACJE PONIŻEJ LINII SĄ TERAZ NIEPRAWIDŁOWE

EDYCJA: Oryginalna odpowiedź na dole jest teraz nieprawidłowa. Prawidłowa sekcja połączonego pliku źródłowego (aktualna 25/07/2014) to:

Gofmt formatuje programy Go.
Używa tabulatorów (szerokość = 8) do wcięć i spacji do wyrównywania.

Oryginalna odpowiedź (przestarzała):

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
źródło
4
-tabsi -tabwidthjuż (i -commentsnie jest już udokumentowane przynajmniej; nie wyglądał bardziej ściśle)
William
2
@billisphere Dzięki, zaktualizowałem odpowiedź o odpowiednią sekcję połączonego pliku.
Intermernet,
5
Gdy używasz znaków tabulacji, nie ma czegoś takiego jak użycie określonej szerokości tabulatora, więc (poprzednia) opcja tabwidth nie działa i część „width = 8” zaktualizowanego tekstu powinna zostać usunięta. Szerokość tabulatora jest skonfigurowana w przeglądarce Ten błąd istnieje również w połączonym źródle
thomasrutter
2
To jest nieaktualne. W dokumentacji gofmtpolecenia nie ma już wzmianki o przepustowości . Został usunięty tutaj: github.com/golang/go/commit/…
TehSphinX