數組是具備相同惟一類型的一組已編號且長度固定的數據項序列(同構的數據結構);這種類型能夠是任意的原始類型,例如整型、字符串或者自定義類型。python
數組長度必須是一個常量表達式,而且必須是一個非負整數。數組
數組成都也是數組類型的一部分,因此[5]int和[10]int是屬於不一樣類型的。數據結構
數組是一種值類型。ide
數組的編譯時,值初始化時按照數組順序完成的函數
知識擴展:1.PHP中的數組其實是一個有序映射。映射是一種把values關聯到keys的類型;2.C語言中的數組是指向首元素的指針spa
聲明的格式:var identifier [len]type。例如: var arr1 [5]int。指針
備註:Go語言中的數組是一種值類型(C/C++中是指向首元素的指針)。Go中的數組能夠用new()來建立:var arr1 = new([5]int),這種方式建立出來的數組arr1的類型是*[5]int,而arr2的類型是[5]int。當把數組做爲參數傳給函數是,會產生一次賦值,函數就不會修改原始數組。code
arr1 := new([3]int) arr2 := arr1 arr2[1] = 23 fmt.Println(arr1[1]) // 結果爲23,由於arr1的類型是*[3]int
1 var arr1 = [5]int{1,2,3,4,5} // 也是寫成[5]int{1,2}其餘位置的值默認0 2 var arr2 = [...]int{1,2,3,4,5} // 從技術上說變成了切片 3 var arr3 = [5]string{2:'kobe',3:'paul'} // 索引23被賦值
切片(slice)是對數組一個連續片斷的引用(該數組咱們稱之爲相關數組,一般是匿名的),因此切片時一個引用類型。blog
聲明切片的格式是:var identifier []type (備註:不須要說明其長度)索引
切片在未初始化以前爲nil,長度爲0。
切片的特色
切片的建立
var slice1 = []int{1,2,3,4} // 建立了一個長度爲4的數組,並建立了一個相關切片 var slice2 = make([]int,5) // make([]type,len,cap)(cap可選參數) var slice3 = new([]int) // slice3=nil,切片沒有被初始化,make()建立的會直接初始化。
切片的原理
在內存中是一個3個域的結構體:指向相關數組的指針,切片長度及切片容量。
使用make生成切片的原理
方式 var slice1 := make([]type,len,cap) 參數分別是切片類型,切片長度,切片容量。cap參數可選,若是忽略的話,默認建立的切片len=cap
1 //這兩種方法生成相同的切片,切片是引用類型,因此他們類型也是相同的 2 make([]int,50,100) 3 new([100]int)[0:50]
make()方法生成的切片的內存結構