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

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

Какая официальная рекомендация, если таковая имеется?


person Erik Kaplun    schedule 30.09.2013    source источник
comment
medium.com/@hoffa/   -  person Brad Werth    schedule 31.08.2016


Ответы (2)


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

go fmt

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

gofmt -w .

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

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

person ANisus    schedule 30.09.2013
comment
Да, табуляции для отступов - это официальная рекомендация. Вы можете использовать отступы в пространстве, как указывает @Intermernet, но это не рекомендация. - person ANisus; 30.09.2013
comment
@ErikAllik, на самом деле, официальная позиция заключается не в использовании вкладок, а в использовании go fmt в вашем коде перед его отправкой (обратите внимание, что там также gofmt). Я пытаюсь доказать, что Go сделал это правильно не просто объявив политику, но приняв инструмент, который ее применяет. Это необычно, поэтому постарайтесь осознать эту идею и принять go fmt. Обратите внимание, что существуют даже автоматизированные решения (например, официальный плагин Go для Vim поддерживает команду :Fmt, IIRC). - person kostix; 30.09.2013
comment
Просто наблюдение: go fmt будет сохранять отступы внутри объявленных строк (как и ''), но будет отступать для кода в другом месте с помощью вкладок. - person marcio; 29.11.2014
comment
Несмотря на то, что это обеспечивается инструментом, все же важно знать, чтобы можно было настроить, как представлять вкладки в редакторе по своему выбору. (Например, пользователи Emacs могут установить tab-width в своем go-mode-hook.) - person eold; 04.02.2016
comment
Я думаю, стоит отметить, что принятие / требование инструмента не останавливает все споры, но это означает, что вместо того, чтобы люди злятся на вас за ваш самоуверенный выбор, люди злятся на вас за то, что вы приняли инструмент (и на производителей инструментов за их самоуверенный выбор). - person mtraceur; 10.04.2018

ИЗМЕНИТЬ 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.
person Intermernet    schedule 30.09.2013
comment
-tabs и -tabwidth исчезли-comments больше не документированы по крайней мере; внимательнее не смотрел) - person William; 25.07.2014
comment
@billisphere Спасибо, я обновил ответ, добавив в ответ соответствующий раздел связанного файла. - person Intermernet; 25.07.2014
comment
Когда вы используете символы табуляции, не существует такой вещи, как использование определенной ширины табуляции, поэтому (прежний) параметр ширины табуляции не имеет никакого эффекта, и часть обновленного текста шириной = 8 дюймов должна быть удалена. Ширина вкладки настраивается во вьювере. Эта ошибка также существует в связанном источнике. - person thomasrutter; 22.05.2017
comment
Это устарело. В документации команды gofmt больше нет упоминания о ширине табуляции. Он был удален здесь: github.com/golang/go/commit/ - person TehSphinX; 11.12.2019