четверг, 17 января 2019 г.

Эффективный Go: форматирование

Вопросы форматирования являются самыми спорными, но наименее значимый. Люди могут адаптироваться к различным стилям форматирования, но лучше, если они не должны этого делать. И лучше, если меньше времени уделяется данной теме, если все придерживаются одного и того же стиля форматирования. Проблема в том, как подойти к этой теме без долгих предписывающих руководств по стилю форматирования.

С Go мы используем необычный подход и даем машине заботиться о большинстве вопросов форматирования. Программа gofmt (также доступно как go fmt, работающее на уровне пакета, а не на уровне исходного файла) читает Go программу и выдает исходный код в стандартном стиле отступов и вертикального выравнивания, при этом сохраняет и при необходимости переформатирует комментарии. Если вы хотите знать, как работать с какой-либо новой шаблонной ситуацией, запустите gofmt; если ответ не кажется правильным, переставьте блоки в вашей программе (или сообщите об ошибке gofmt), и больше не тратьте на это время.

Так, например, нет необходимости тратить время на выравнивание комментариев к полям структуры. Gofmt сделает это за вас. Например, дана декларация:

type T struct {
    name string // имя объекта
    value int // его значение
}

gofmt выстроит столбцы в ряд:

type T struct {
    name    string // имя объекта
    value   int    // его значение
}

Весь Go код в стандартных пакетах был отформатирован с помощью gofmt.

Остались некоторые детали форматирования. Очень кратко:

  • Отступ (Indentation). Для отступов используются табы, а gofmt выводит их по умолчанию. Используйте пробелы, только если это крайне необходимо.
  • Длина строки. Go не имеет ограничения по длине строки. Не беспокойтесь о переполнении перфокарты. Если строка кажется слишком длинной, оберните ее и сделайте отступ с дополнительным табом.
  • Скобки. Go требует меньше скобок, чем C и Java: управляющие структуры (if, for, switch) не содержат скобок в их синтаксисе. Кроме того, иерархия приоритетов операторов короче и понятнее, поэтому

    x<<8 + y<<16
    

    означает, то что подразумевается пробелами, в отличие от других языков.


Читайте также:


Комментариев нет:

Отправить комментарий