DevToolPal
RU

Форматирование Go

Форматирование исходного кода Go с помощью gofmt, скомпилированного в WebAssembly и работающего в браузере.

Работает локально, без загрузки на сервер

Параметры

Отступ

Ввод

Символов: 0 · 0 B

Результат

Символов: 0 · 0 B

Что делает инструмент

Форматтер Go переписывает исходный код Go в единый канонический стиль, которым пользуется всё сообщество Go. Вставьте файл или фрагмент — и получите его с отступами, пробелами, группировкой импортов и выравниванием полей структур и комментариев, как у gofmt.

Работает настоящий gofmt из тулчейна Go, скомпилированный в WebAssembly. Ничего не аппроксимируется: вы видите ровно то, что записал бы go fmt, поэтому отформатированный код можно коммитить, не вызывая диффов в CI.

Как пользоваться

  1. Вставьте код на Go или откройте файл .go.
  2. Отформатированный код появляется справа по мере ввода.
  3. Оставьте отступ Табуляция для кода, который будете коммитить. Выберите 2 пробела или 4 пробела, если код пойдёт в документ, на слайд или на сайт, где табуляция отображается слишком широкой.
  4. Скопируйте или скачайте результат.

Если код не разбирается, инструмент покажет первую ошибку со строкой и столбцом, например expected ')', found '{', и можно сразу перейти к этой строке.

Пример

В примере — короткая программа, втиснутая в минимум строк: импорты через точку с запятой, структура в двух строках и функции без пробелов вокруг операторов. После форматирования:

  • импорты превращаются в блок в скобках, по одному пакету в строке;
  • поля структуры стоят на отдельных строках, а их типы выровнены в столбец;
  • if u.Age<18{ превращается в if u.Age < 18 {, а тело переносится на отдельную строку;
  • в составных литералах появляются пробелы после запятых и двоеточий.

Что gofmt меняет, а что нет

gofmt меняет только оформление. Он никогда не переименовывает идентификаторы, не меняет порядок объявлений и не удаляет неиспользуемые импорты — это задачи инструментов вроде goimports и go vet. Он также сохраняет ваши переносы строк там, где они значимы, поэтому длинный список аргументов, разбитый на несколько строк, так и останется разбитым.

Комментарии сохраняются и получают отступы вместе с окружающим кодом. Комментарии в конце соседних строк выравниваются в столбец — так же, как поля структур.

Советы

  • Форматирование — быстрый способ найти пропущенную фигурную скобку: позиция ошибки обычно указывает на первую строку после промаха.
  • Прогоняйте форматтер, прежде чем делиться кодом в issue или на ревью. Тогда ревьюеры смогут сосредоточиться на том, что делает код, а не на том, как он выглядит.
  • В редакторе включите «форматирование при сохранении» с gopls, чтобы ваши файлы всегда совпадали с этим результатом.

Частые вопросы

› Это настоящий gofmt?

Да. Форматтер — это код gofmt из тулчейна Go, скомпилированный в WebAssembly, поэтому результат байт в байт совпадает с тем, что выводит `gofmt` или `go fmt` на вашей машине.

› Нужна ли директива package?

Нет. Лучше всего вставлять файл целиком, но gofmt принимает и список объявлений или несколько инструкций — это удобно для фрагментов, скопированных из статьи или чата.

› Почему для отступов используется табуляция?

gofmt всегда делает отступы табуляцией, а выравнивание — пробелами. Таково соглашение в Go, а редакторы показывают табуляцию любой нужной вам ширины. Если для документа или слайда нужны пробелы, выберите 2 или 4 пробела — заменятся только ведущие табуляции.

› Загружается ли мой код на сервер?

Нет. Модуль WebAssembly скачивается один раз, а форматирование выполняется локально в браузере.