GoLang學習筆記(二十)切片的宣告及遍歷

2021-09-10 08:11:57 字數 1682 閱讀 9093

go語言的切片是對陣列的抽象。

go中的陣列的長度不可以改變,go中就提供了乙個靈活、功能強悍的內建型別切片:動態陣列。

與陣列相比切片的長度是不固定的,可以追加元素。

切片本身沒有任何資料,他們只是對現有陣列的引用。

切片與陣列相比,不需要設定長度,在中不用設定值。

從概念上來說,切片slice像乙個結構體,這個結構體包含了三個元素:

1、指標,只想陣列中slice指定的開始位置

2、長度,即slice的長度

3、最大長度,也就是slice開始位置到陣列最後位置的長度

宣告乙個切片:

var 變數名 變數型別

切片不需要說明長度,所以未初始化的切片為空切片,該預設切片為nil,長度為0

var s1 int
用make()函式來建立切片:

1、var 變數名 變數型別 = make(變數型別,長度)

2、簡寫:變數名 := make(變數型別,長度)

3、可以指定容量,且容量引數是可選引數:變數名 := make(變數型別,長度、容量)

var s2 = make(int, 5)

var s3 = make(int, 4, 6)

s4 := make(int, 5)

s5 := make(int, 4, 6)

直接初始化:

a := int
通過陣列擷取來初始化切片:

arr := [5]int

1、包含陣列中所有元素

a := arr[:]

2、從乙個下標到另乙個下標-1

a := arr[開始的下標:結束的下標-1]

3、從乙個指定的下標到最後乙個元素

a := arr[開始的下標:]

4、從開始的下標到指定的乙個下標-1

a := arr[:結束的下標-1]

通過擷取切片來初始化切片:

b := a[較小的下標:較大的下標]

func testslice03()

printmsg(nums1)

nums2 := nums1[1:4]

printmsg(nums2)

nums3 := nums1[:3]

printmsg(nums3)

nums4 := nums1[6:]

printmsg(nums4)

}

執行結果:

len = 10 , cap = 10 , slice = [0 1 2 3 4 5 6 7 8 9]

len = 3 , cap = 9 , slice = [1 2 3]

len = 3 , cap = 10 , slice = [0 1 2]

len = 4 , cap = 4 , slice = [6 7 8 9]

可以從結果中的cap看出,nums2實際是刪除了nums1[0],所以cap為9。

看num3,從頭開始擷取,雖然只有3個元素被擷取出來了,但cap依然為10。

在看num4,實際是將第六個元素之前的元素都刪除了,所以cap為4。

由此可以看出,擷取後的cap是會有變化的。

綜合以上3個例子,可以看出擷取的切片,從指定開始擷取的元素之前的元素,都會從cap中減去。

Golang切片學習筆記

在 golang 中可以通過多種方式建立和初始化切片。是否提前知道切片所需的容量通常會決定如何建立切片。1.1 通過 make 函式建立切片 使用 golang 內建的 make 函式建立切片,此時需要傳入乙個引數來指定切片的長度 建立乙個整型切片 其長度和容量都是 5 個元素 slice make...

三 Golang學習筆記 切片

陣列存在的問題 定義完,長度固定,不易擴充套件 切片 長度不固定,可以追加元素,可以理解成 動態陣列 但不是陣列 func main 3.使用make函式建立 make 型別,長度 初始化空間 容量 初始化和空閒 長度不能大於容量,第三個引數可以省略 s make int,3 5 fmt.print...

golang 切片學習

package main 這裡只說些自己理解的,當然切片的操作遠遠不止這些。import fmt reflect 學習切片首先要明白len和cap的區別。len 是儲存資料多少,cap 是容量大小。舉個例子乙個大會堂可以容納1000人這是cap,但是實際裡面隻座了100人這是len func mai...