Відступ у програмі Go: вкладки чи пробіли?


125

Чи є десь стандартний документ із умовами кодування Google Go, який встановлює, чи вкладки чи пробіли є кращими для відступу у вихідному коді Go? Якщо ні, то який (статистично) більш популярний варіант?

  1. Яка офіційна рекомендація? (якщо якийсь)
  2. Який більш популярний вибір?

Відповіді:


195

Офіційна рекомендація - це форматування коду за допомогою

go fmt

або безпосередньо використовуючи команду gofmt

gofmt -w .

Докладніше про це можна прочитати тут на блозі golang.org або з документа « Ефективний перехід» :

Відступ
Ми використовуємо вкладки для відступу і gofmt видає їх за замовчуванням. Використовуйте пробіли, лише якщо вам потрібно.


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 за вказівку на це!

ВСІ ІНФОРМАЦІЇ, ЩО ЦЕ РЯДЬ НЕПРАВИЛЬНИЙ

EDIT: Оригінальна відповідь у нижній частині тепер неправильна. Правильний розділ пов'язаного вихідного файлу (поточний 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.

4
-tabsі -tabwidthякі пішли-commentsбільше не задокументовані , по крайней мере, не більш уважно)
William

2
@billisphere Спасибі, я оновив відповідь у відповідному розділі пов'язаного файлу.
Intermernet

5
Якщо ви використовуєте символи вкладки, немає такої можливості, як використання певної ширини вкладок, тому параметр (колишній) пропускної здатності не має ефекту, і частина "width = 8" оновленого тексту повинна бути видалена. Ширина вкладки налаштована в переглядачі Ця помилка існує і в пов'язаному джерелі
thomasrutter

2
Це застаріло. Більше не згадується про ширину табуляції в документації gofmtкоманди. Тут було видалено: github.com/golang/go/commit/…
TehSphinX
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.