带有方法/功能的Golang逗号

时间:2015-03-30 18:22:59

标签: methods go comma

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

func (ds *dasa,) yoooooolo (dsa dasa,) (dsaa dasa,) 

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

2 个答案:

答案 0 :(得分:5)

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

这可能是该语言的设计者明确的设计选择,以更多地允许不相关的语法错误;但是,只有他们才能解释他们的动机。

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

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

ys := []int{
  1,
  2, // <-- required comma.
}
m := map[string]int{
  "foo": 1,
  "bar": 2, // <-- required comma.
}

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

答案 1 :(得分:3)

当你有一个包含许多参数的函数时,你有时想要将函数头扩展到多行上,如下所示:

func foo(
    int arg1,
    string arg2,
    []byte arg3,
    error arg4,
 ) {
    /* implementation goes here */
 }

尾随逗号允许更正交的方式来记下此参数列表。