我有一个结构:
type nameSorter struct {
names []Name
by func(s1, s2 *Name) bool
在此方法中使用。这个逗号发生了什么事?如果我将其删除则会出现语法错误。
func (by By) Sort(names []Name) {
sorter := &nameSorter{
names: names,
by: by, //why does there have to be a comma here?
}
sort.Sort(sorter)
此外,下面的代码完美无缺,似乎更清晰。
func (by By) Sort(names []Name) {
sorter := &nameSorter{names, by}
sort.Sort(sorter)
对于更多上下文,此代码是一系列声明的一部分,用于对自定义类型进行排序,如下所示:
By(lastNameSort).Sort(Names)
答案 0 :(得分:10)
这是行之有效的方法,对comma
和parentheses
等内容严格要求。
关于这个概念的好处是,当添加或删除一行时,它不会影响其他行。假设可以省略最后一个逗号,如果要在其后面添加一个字段,则必须添加逗号。
请参阅此帖:https://dave.cheney.net/2014/10/04/that-trailing-comma。
答案 1 :(得分:0)
来自https://golang.org/doc/effective_go.html#semicolons:
词法分析器使用一条简单的规则在扫描时自动插入分号,因此输入文本中几乎没有分号
换句话说,程序员无需使用分号,但Go仍在编译前在幕后使用了分号。
将分号插入:
换行符之前的最后一个标记是标识符(包括int和float64之类的单词),基本文字(例如数字或字符串常量)或标记
之一break continue fallthrough return ++ -- ) }
因此,如果没有逗号,则词法分析器将插入分号并导致语法错误:
&nameSorter{
names: names,
by: by; // semicolon inserted after identifier, syntax error due to unclosed braces
}