带有方法/功能的Golang逗号

nho*_*oyr 1 methods comma go

为什么我们允许在方法声明中的接收器末尾或参数列表或返回列表中放置逗号.像这样:

func (ds *dasa,) yoooooolo (dsa dasa,) (dsaa dasa,) 
Run Code Online (Sandbox Code Playgroud)

为什么允许这样做?最后所有这些逗号?

mae*_*ics 5

Golang允许在许多声明后使用尾随逗号.

这可能是语言设计者明确的设计选择,可以更加宽松地承担无关的语法错误; 但是,只有他们才能解释他们的动机.

func (f *Foo,) Bar(x, y int,) (int, error,) { //...
f.Bar(1, 2, 3,)
xs := []int{1, 2, 3,}
Run Code Online (Sandbox Code Playgroud)

事实上,在一些多行文字声明中,它需要尾随逗号(大概是为了简化元素的重新排序):

ys := []int{
  1,
  2, // <-- required comma.
}
m := map[string]int{
  "foo": 1,
  "bar": 2, // <-- required comma.
}
Run Code Online (Sandbox Code Playgroud)

请注意,该go fmt命令会自动删除无关的可选尾部逗号.在构建代码之前,应始终运行该工具.