英文:
Golang bug or intended feature on map literals?
问题
刚开始学习Go语言,我需要一个字符串到字符串的映射,我希望能够直接初始化。
mapa := map[string]string{
"jedan":"one",
"dva":"two",
}
但是编译器报错了,提示syntax error: need trailing comma before newline in composite literal
(复合字面量之前需要逗号或换行符)。
所以我不得不在"two",
后面加上逗号,或者删除换行符,在最后一个值后面加上}
,编译器才能通过。
这是代码风格的预期行为吗?
编辑:为了明确起见,以下代码可以编译并正常工作:
mapa := map[string]string{
"jedan":"one",
"dva":"two",
}
go version go1.4.2 darwin/amd64
Mac OSX 10.9.5
英文:
Just started to learn Go and I need map of string string, that I initialize literally.
mapa := map[string]string{
"jedan":"one",
"dva":"two"
}
But compiler is complaining syntax error: need trailing comma before newline in composite literal
So I had to add coma after "two",
or delete a new line and have }
after last value for compiler to be happy
Is this intended behavior of code style?
EDIT: to be clear follwing will compile and work
mapa := map[string]string{
"jedan":"one",
"dva":"two" }
go version go1.4.2 darwin/amd64
Mac OSX 10.9.5
答案1
得分: 48
Go语言中有分号,但你看不到它们,因为它们是由词法分析器自动插入的。
分号插入规则如下:
- 如果一行的最后一个标记是整数、浮点数、虚数、符文或字符串字面量,则自动在标记流的末尾插入一个分号。
因此,这段代码:
mapa := map[string]string{
"jedan": "one",
"dva": "two"
}
实际上是这样的:
mapa := map[string]string{
"jedan": "one",
"dva": "two"; // <- 分号
}
这是无效的Go代码。
英文:
Go has semicolons, but you don't see them because they're inserted automatically by the lexer.
> a semicolon is automatically inserted into the token stream at the end of a non-blank line if the line's final token is
>
> * an integer, floating-point, imaginary, rune, or string literal
So this:
mapa := map[string]string{
"jedan": "one",
"dva": "two"
}
is actually:
mapa := map[string]string{
"jedan": "one",
"dva": "two"; // <- semicolon
}
Which is invalid Go.
答案2
得分: 16
是的,是这样的。你应该选择添加逗号。
这样编辑地图/切片文字会更简单:你可以复制粘贴,移动项目,而不必担心最后一个项目后面不应该有逗号。
实际上,在PHP、JavaScript和许多其他语言中也可以这样做。
英文:
Yes it is. And you should choose the added comma.
It is much more simple to edit map/slice literals that way : you can copy-paster, move items around without worrying about the fact that the last item shouldn't be followed by a comma.
In fact, you can also do the same in PHP, javascript, and many other languages.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论