GO語言入門-切片的基礎和本質

GO語言入門-切片的基礎和本質

1、爲什麼使用切片

- 數組的容量固定,不能自動拓展
值傳遞,數組作爲參數參數時,將整個的數值拷貝一份給形參。
在GO語言當中,我們幾乎可以在所有的場景中,使用切片替換數組。

2、切片的本質

不是一個數組的指針,是一種數據結構體,用來操作數組內部元素。  /runtime/slice.go
  • 切片的結構如下:
type slice struct{
    	 *p
   	 len
    	cap
    }

3、切片的使用

切片名稱[low:high:max]

  • low: 起始下標位置
  • high: 結束下標位置
  • 容量:cap = max - low

參考示例:

func main() {
	arr := [8] int{1, 2, 3, 4, 5, 6, 7, 8}

	s := arr[1:3:5]
	fmt.Println("s = ", s)
	fmt.Println("len(s) = ", len(s))
	fmt.Println("cap(s) = ", cap(s))

	s2 := s[0:3]
	fmt.Println("s2 = ", s2)
	fmt.Println("len(s2) = ", len(s2))
	fmt.Println("cap(s2) = ", cap(s2))
}

運行輸出:

s =  [2 3]
len(s) =  2
cap(s) =  4
s2 =  [2 3 4]
len(s2) =  3
cap(s2) =  4

說明:截取數組 初始化切片時,沒有指定切片容量時,切片容量跟隨原數組(切片)

4、切片的創建

1、自動推導類型創建切片
slice := [] int{1,2,3,4}
2、make方式創建
slice :=make([]int,長度,容量)
3、make創建
slice := make([]int,長度)當容量爲空時,容量=長度

5、append函數

在切片尾部追加數據

func appends() {
	arr := [] int{1, 2, 3, 4, 5, 6, 7, 8}
	arr = append(arr, 22)
	arr = append(arr, 33)
	arr = append(arr, 44)
	arr = append(arr, 55)
	arr = append(arr, 66)
	fmt.Println("arr is ", arr)
}

輸入結果:
arr is [1 2 3 4 5 6 7 8 22 33 44 55 66]
注:向切片增加元素時,切片的容量會自動增長。1024一下時,以兩倍方式增長

6、copy函數

- 函數copy在兩個slice之間複製數據,複製長度以len小的爲準,兩個slice指向同一地層數組,直接對應位置覆蓋。

copy(目標位置切片,原切片)

func copyTest() {
	arr := [] int{0, 1, 2, 3, 4, 5, 6, 7, 8}
	s1 := arr[7:]
	s2 := arr[:2]
	copy(s2, s1)
	fmt.Println("arr is ", arr)
	fmt.Println("s2 is ", s2)
}

輸入結果如下:

arr is  [7 8 2 3 4 5 6 7 8]
s2 is  [7 8]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章