1

gofmt 命令不格式化花括号 ({})。

代码:

package main

import "fmt"

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

gofmt hello.go 的输出

hello.go:6:1: 预期声明,发现 '{' 退出状态 2

如果我把空格放在任何地方,它会正确格式化。gofmt 不会格式化大括号吗?

4

3 回答 3

6

您必须将大括号放在函数声明的同一行中,否则您的代码将由于此语法错误而无法编译

为什么有大括号但没有分号?为什么我不能把左大括号放在下一行?

Go 使用大括号进行语句分组,这是使用过 C 家族中任何语言的程序员所熟悉的语法。然而,分号是用于解析器的,而不是用于人的,我们希望尽可能地消除它们。为了实现这个目标,Go 借鉴了 BCPL 的一个技巧:分隔语句的分号在形式语法中,但在可能是语句结尾的任何行的末尾由词法分析器自动注入,无需前瞻。这在实践中非常有效,但它的效果是强制使用大括号样式。例如,函数的左大括号不能单独出现在一行上。

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

于 2016-07-22T06:59:41.047 回答
3

您的代码有语法错误:将打开的大括号与函数声明放在同一行。
并且程序片段必须在语法上有效才能使用 gofmt:

见: https ://golang.org/cmd/gofmt/ 它说:

当 gofmt 从标准输入读取时,它接受完整的 Go 程序或程序片段。程序片段必须是语法上有效的声明列表、语句列表或表达式。在格式化这样的片段时,gofmt 保留前导缩进以及前导和尾随空格,以便 Go 程序的各个部分可以通过 gofmt 管道来格式化。

于 2016-07-22T07:02:31.703 回答
0

把大括号和函数声明放在同一行也许你应该在你的编辑器中添加 gofmt ,它可以避免代码格式的问题

于 2016-07-23T02:56:02.047 回答