golang切片

知識點一覽:

1. 切片的底層是數組
2. 切片支持自動擴容
3. 切片屬於引用類型
4. 切片內部包括地址, 長度(len), 容量(cap).其中長度指切片中的元素個數,容量指底層實現的數組長度
5. 切片一般用於快速操作一塊數據結合

使用make函數構造切片

s2 := make([]int, 4, 8)
    fmt.Println(s2, len(s2), cap(s2))

切片的本質

1. 切片是一種引用
	當使用一個數組初始化切片的時候切片會和數組指向相同的地址

如果在此時修改a1或者s1其中任何一個的內容,另外一個一會跟著改變.同時如果使用len和cap函數計算s1的長度和容量結果都是4.
    
a1[0] = 100
    fmt.Println(s1, a1) //輸出[100 2 3 4] [100 2 3 4]
2. 切片的底層是數組
使用append函數給s1添加一個元素,然後測試s1的長度和容量,你會發現他的長度變成了5,但是容量變成了8.這是因為在切片動態擴容的時候會創建一個新的數組,新數組的長度是原本數組長度的2倍.也就是說切片的長度指的是切片當中的元素個數,而容量是底層數組的長度--如果在上面初始化的的時候只用a1的前3個元素初始化切片,那麼你會看到s1的長度是3,但是容量依舊為4,因為這個時候該切片的底層數組是a1.而當切片需要擴容的時候原本的數組就會被拋棄,並創建新的底層數組--不用擔心,如果go擁有垃圾回收功能--如果你還是不信可以不斷給切片添加元素,逼迫其自動擴容,然後輸出其每次的地址,你就會看到每次擴容的時候其地址都會改變.

增刪改查

1. 使用appden()增加元素
s1 = append(s1, 200)
注意: append不會在原本切片上修改切片,而是產生一個新的切片,所以想要修改產生左右必須將其賦值給原本的切片--如果不複製給一個變量,會出現語法錯誤,所以不用太擔心忘記.

2. 沒有自帶刪除函數
切片沒有默認的刪除元素的方法,但是可以通過append實現刪除元素的效果
比如要刪除第2個元素(索引為1的元素)

s1 = append(s1[:1], s1[2:]...)
這樣就實現了元素刪除的功能,

3. 通過索引修改,查看內容
切片可以和數組一樣通過: 變量名[索引]的方式來取得切片中某個位置的內容或者修改他

s1[0] = 100
把索引為0的元素修改為100

原文地址:https://www.cnblogs.com/ltozvxe/p/13718668.html