2015-02-24 86 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