Команда GoLang gofmt

Команда gofmt не форматирует фигурные скобки цветов ({}).

Код:

package main

import "fmt"

func main() 
{
    fmt.Printf("Hello, world\n")
}

Вывод gofmt hello.go

hello.go: 6: 1: ожидаемое объявление, найдено '{' статус выхода 2

Если я поставлю пробелы в любом месте, он правильно его отформатирует. Гофмт идет не форматирует фигурные скобки?


person Chirag Pahuja    schedule 22.07.2016    source источник
comment
Имейте в виду, что в Go фигурные скобки должны использоваться вместе с объявлением функции!   -  person Endre Simo    schedule 22.07.2016


Ответы (3)


Вы должны поместить фигурную скобку в ту же строку объявления функции, иначе ваш код не будет компилироваться из-за этой синтаксической ошибки.

Почему фигурные скобки, а не точки с запятой? И почему я не могу поставить открывающую скобку на следующую строку?

Go использует фигурные скобки для группировки операторов, синтаксис, знакомый программистам, которые работали с любым языком семейства C. Однако точки с запятой предназначены для парсеров, а не для людей, и мы хотели как можно больше их исключить. Для достижения этой цели Go заимствует уловку из BCPL: точки с запятой, разделяющие операторы, находятся в формальной грамматике, но вводятся автоматически, без просмотра вперед, лексером в конце любой строки, которая может быть концом оператора. Это очень хорошо работает на практике, но приводит к принудительному использованию стилей скобок. Например, открывающая скобка функции не может появляться в строке сама по себе.

https://golang.org/doc/faq#semicolons

person Alessio    schedule 22.07.2016

в вашем коде есть синтаксическая ошибка: поместите открытую фигурную скобку в одну строку с объявлением функции.
и Фрагмент программы должен быть синтаксически допустимым для использования gofmt:

см. https://golang.org/cmd/gofmt/, в нем говорится:

Когда gofmt читает со стандартного ввода, он принимает либо полную программу Go, либо ее фрагмент. Фрагмент программы должен быть синтаксически допустимым списком объявлений, списком операторов или выражением. При форматировании такого фрагмента gofmt сохраняет начальные отступы, а также начальные и конечные пробелы, так что отдельные разделы программы Go можно форматировать, передавая их по конвейеру через gofmt.

person Community    schedule 22.07.2016

поместите открытую фигурную скобку в одну строку с объявлением функции, возможно, вам следует добавить gofmt в свой редактор, это может избежать проблем с форматом кода

person Ansiz    schedule 23.07.2016