英文:
Confusion with "..." operator in golang
问题
以下是要翻译的内容:
以下两种语法在Go语言中有什么区别?
x := [...]int{ 1:1, 2:2 }
x := []int{ 1:1, 2:2 }
Go语言的文档中说:“符号...指定数组的长度等于最大元素索引加一”。但是上述两种语法都给出了相同的长度(3)。
这个运算符“...”有一个名称吗?
在谷歌上没有找到搜索这个运算符的方法。
英文:
What is the difference between the following two syntaxes in go?
x := [...]int{ 1:1, 2:2 }
x := []int{ 1:1, 2:2 }
Go's document says "The notation ... specifies an array length equal to the maximum element index plus one". But both the above syntaxes gives same lenght (3).
Is there a name for this operator "..."?
Didn't find a way to search this operator in google.
答案1
得分: 16
第一行使用数组字面量创建一个数组,其长度由编译器自动计算。这在语言规范的"复合字面量"部分有详细说明。
表示法...指定了一个数组长度,该长度等于最大元素索引加一。
注:这与用于指定可变参数或将切片作为值传递的...
不要混淆。这在规范的"函数类型"部分有详细说明。
第二行使用切片字面量,将生成一个切片。请注意,在底层也会创建一个数组,但这是不透明的。
英文:
The first line creates an array using an array literal, its length computed automatically by the compiler. It is detailed in the Composite literals section of the Language Specification.
> The notation ... specifies an array length equal to the maximum element index plus one.
<sup>Note: this is not to be confused with the ...
used to specify variadic parameters or to pass slices as their values. It is detailed in the Function types section of the spec.</sup>
The second line uses a slice literal and will result in a slice. Note that under the hood an array will also be created, but that is opaque.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论