2015-02-24 59 views
4

go中的以下两种语法有什么区别?golang中的“...”运算符混淆

x := [...]int{ 1:1, 2:2 } 
x := []int{ 1:1, 2:2 } 

Go的文档中写着“符号...指定的数组长度等于最大元素索引加1”。但是,上面的语法都给出了相同的长度(3)。

这个操作符是否有一个名称“...”? 没有找到一种方法来搜索这个运营商在谷歌。

+1

您可能想要通过tour.golang.org工作。 – Volker 2015-02-24 11:30:47

回答

9

第一行创建一个array使用数组文字,它的长度由编译器自动计算。它在语言规范的Composite literals部分有详细说明。

符号...指定的数组长度等于最大元素索引加1。

注意:这是不与用于指定可变参数参数或通过片因为它们的值的...混淆。详细说明参见Function types部分。

第二行使用切片文字并将导致slice。请注意,在引擎盖下还会创建一个数组,但这是不透明的。

+1

我有疑问。首先创建一个数组[0,1,2],第二个创建一个指向数组[0,1,2]的slice(lenght = capacity = 3)。有这两个的区别是什么 – Spartan 2015-02-24 10:03:03

+0

切片是一种动态数组,而数组的大小是固定的。 – Elwinar 2015-02-24 10:08:05

+1

@斯巴达恩,首先,他们有两种不同的类型。如果您在询问数组和切片的用处/用法,请阅读Effective Go:[Arrays](http://golang.org/doc/effective_go.html#arrays),[切片](http:// golang .org/doc/effective_go.html#slices)或博客文章[Go Slices:usage and internals](http://blog.golang.org/go-slices-usage-and-internals)和[Arrays,Slices (和字符串):'append'的机制](http://blog.golang.org/slices) – icza 2015-02-24 10:08:26