Go學習筆記 陣列和切片

2022-04-29 18:51:11 字數 1476 閱讀 5014

陣列

陣列是具有相同唯一型別的一組已編號且長度固定的資料項序列(同構的資料結構);這種型別可以是任意的原始型別,例如整型、字串或者自定義型別。

陣列長度必須是乙個常量表示式,並且必須是乙個非負整數。

陣列成都也是陣列型別的一部分,所以[5]int和[10]int是屬於不同型別的。

陣列是一種值型別。

陣列的編譯時,值初始化時按照陣列順序完成的

知識擴充套件:1.php中的陣列實際上是乙個有序對映。對映是一種把values關聯到keys的型別;2.c語言中的陣列是指向首元素的指標

宣告的格式:var identifier [len]type。例如: var arr1 [5]int。

陣列的特點:

陣列長度的特點:

備註:go語言中的陣列是一種值型別(c/c++中是指向首元素的指標)。go中的陣列可以用new()來建立:var arr1 = new([5]int),這種方式建立出來的陣列arr1的型別是*[5]int,而arr2的型別是[5]int。當把陣列作為引數傳給函式是,會產生一次賦值,函式就不會修改原始陣列。

arr1 := new([3]int)

arr2 := arr1

arr2[1] = 23

fmt.println(arr1[1]) // 結果為23,因為arr1的型別是*[3]int

陣列的變化形式

1 var arr1 = [5]int // 也是寫成[5]int其他位置的值預設0

2 var arr2 = [...]int //從技術上說變成了切片

3 var arr3 = [5]string // 索引23被賦值

切片切片(slice)是對陣列乙個連續片段的引用(該陣列我們稱之為相關陣列,通常是匿名的),所以切片時乙個引用型別。

宣告切片的格式是:var identifier type (備註:不需要說明其長度

切片在未初始化之前為nil,長度為0。

切片的特點

切片的建立

var slice1 = int //建立了乙個長度為4的陣列,並建立了乙個相關切片

var slice2 = make(int,5) //make(type,len,cap)(cap可選引數)

var slice3 = new(int) // slice3=nil,切片沒有被初始化,make()建立的會直接初始化。

切片的原理

使用make生成切片的原理

方式 var slice1 := make(type,len,cap)  引數分別是切片型別,切片長度,切片容量。cap引數可選,如果忽略的話,預設建立的切片len=cap

1 //這兩種方法生成相同的切片,切片是引用型別,所以他們型別也是相同的 

2 make(int,50,100)

3 new([100]int)[0:50]

make()方法生成的切片的記憶體結構

Go學習筆記 陣列和切片

陣列型別的值 以下簡稱陣列 的長度是固定的,而切片型別的值 以下簡稱切片 是可變長的。陣列的長度在宣告它的時候就必須給定,並且在之後不會再改變。可以說,陣列的長度是其型別的一部分。go 語言的切片型別屬於引用型別,同屬引用型別的還有後面會講到的字典型別 通道型別 函式型別等 而 go 語言的陣列型別...

go語言筆記(陣列 切片)

var a 4 int 定義長度為4,型別為int的陣列,沒有初始化時就是預設值 b 4 int 定義的時候同時初值化 c 4 int 通過索引指定初始化 d int 可以不定義陣列的長度,但是要初始化 fmt.println a,b,c,d 執行結果 0 0 0 0 1 2 3 4 2 0 0 5...

Go 學習筆記 04 陣列 切片

陣列長度指定之後,不可修改。會自行推斷陣列長度。var arr int指定索引值來初始化陣列。arr int輸出 1 20 20 0 0 50 基本資料型別和陣列都是值型別,是引用型別。golang 中申明切片之後,切片預設值就是nil。len 取長度,cap 求切片的容量。定義切片的時候,把陣列長...