Отступы в Go: табуляция или пробелы?

125

Есть ли где-нибудь стандартный документ с соглашениями о кодировании в Google Go, который устанавливает, предпочтительны ли табуляции или пробелы для отступов в исходном коде Go? Если нет, то какой вариант (статистически) более популярен?

  1. Какая официальная рекомендация? (если есть)
  2. Какой выбор более популярный?
Эрик Каплун
источник
2
medium.com/@hoffa/…
Брэд Верт

Ответы:

195

Официальная рекомендация - отформатировать код с помощью

go fmt

или напрямую используя команду gofmt

gofmt -w .

Вы можете прочитать об этом здесь, в блоге golang.org, или в документе Effective go :

Отступ
Мы используем табуляции для отступов, и gofmt по умолчанию выводит их. Используйте пробелы только в случае необходимости.

Anisus
источник
59
Итак, вкладки есть.
Эрик Каплун
1
Да, табуляции для отступов - это официальная рекомендация. Вы можете использовать отступы, как указывает @Intermernet, но это не рекомендация.
ANisus
19
@ErikAllik, на самом деле, официальная позиция заключается не в том, чтобы «использовать вкладки», а в том, чтобы «использовать go fmtв своем коде перед его отправкой» (обратите внимание на это также gofmt). Я пытаюсь доказать, что Go сделал это правильно, не просто объявив политику, но приняв инструмент, который ее применяет. Это необычно, поэтому постарайтесь осознать эту идею и принять ее go fmt. Обратите внимание, что существуют даже автоматизированные решения (например, официальный плагин Go для Vim поддерживает :Fmtкоманду IIRC).
kostix
2
Я думаю, стоит отметить, что внедрение / требование инструмента не останавливает все споры, но это означает, что вместо того, чтобы люди злятся на вас за ваш самоуверенный выбор, люди злятся на вас за то, что вы приняли инструмент (и на производителей инструментов за их самоуверенный выбор).
mtraceur
22

РЕДАКТИРОВАТЬ 2: исходный ответ внизу теперь неверен. Правильный раздел связанного исходного файла (текущий 30/12/2019):

Gofmt форматирует программы Go. Он использует табуляторы для отступов и пробелы для выравнивания. Выравнивание предполагает, что редактор использует шрифт фиксированной ширины.

Спасибо TehSphinX за указание на это!

ВСЯ ИНФОРМАЦИЯ ПОД ЭТОЙ СТРОКОЙ ТЕПЕРЬ НЕПРАВИЛЬНАЯ

РЕДАКТИРОВАТЬ: исходный ответ внизу теперь неверен. Правильный раздел связанного исходного файла (текущий 25.07.2014):

Gofmt форматирует программы Go.
Он использует табуляторы (ширина = 8) для отступов и пробелы для выравнивания.

Исходный ответ (не рекомендуется):

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
источник
4
-tabsи -tabwidthкоторые ушли-commentsбольше не документированы , по крайней мере, не более внимательно)
William
2
@billisphere Спасибо, я обновил ответ, добавив соответствующий раздел связанного файла.
Intermernet
5
Когда вы используете символы табуляции, не существует такой вещи, как использование определенной ширины табуляции, поэтому (прежний) параметр ширины табуляции не имеет никакого эффекта, и часть обновленного текста «ширина = 8» должна быть удалена. Ширина табуляции настраивается в средстве просмотра . Эта ошибка также существует в связанном источнике.
thomasrutter
2
Это устарело. В документации команды больше нет упоминания о ширине табуляции gofmt. Он был удален здесь: github.com/golang/go/commit/…
TehSphinX