gofmt 命令不格式化花括号 ({})。
代码:
package main
import "fmt"
func main()
{
fmt.Printf("Hello, world\n")
}
gofmt hello.go 的输出
hello.go:6:1: 预期声明,发现 '{' 退出状态 2
如果我把空格放在任何地方,它会正确格式化。gofmt 不会格式化大括号吗?
您必须将大括号放在函数声明的同一行中,否则您的代码将由于此语法错误而无法编译
为什么有大括号但没有分号?为什么我不能把左大括号放在下一行?
Go 使用大括号进行语句分组,这是使用过 C 家族中任何语言的程序员所熟悉的语法。然而,分号是用于解析器的,而不是用于人的,我们希望尽可能地消除它们。为了实现这个目标,Go 借鉴了 BCPL 的一个技巧:分隔语句的分号在形式语法中,但在可能是语句结尾的任何行的末尾由词法分析器自动注入,无需前瞻。这在实践中非常有效,但它的效果是强制使用大括号样式。例如,函数的左大括号不能单独出现在一行上。
您的代码有语法错误:将打开的大括号与函数声明放在同一行。
并且程序片段必须在语法上有效才能使用 gofmt:
见: https ://golang.org/cmd/gofmt/ 它说:
当 gofmt 从标准输入读取时,它接受完整的 Go 程序或程序片段。程序片段必须是语法上有效的声明列表、语句列表或表达式。在格式化这样的片段时,gofmt 保留前导缩进以及前导和尾随空格,以便 Go 程序的各个部分可以通过 gofmt 管道来格式化。
把大括号和函数声明放在同一行也许你应该在你的编辑器中添加 gofmt ,它可以避免代码格式的问题