Go語言之slice特性
1 slice介紹和說明
golang的資料結構也很多,如List,array,map等,但是有個很特別的資料結構是slice,也叫切片。經常看到很多和陣列的定義有關的操作是 make([]string, 10)。那麼什麼是slice呢?
其實slice也算是golang語言特有的資料結構,底層是以陣列作為支撐;啥概念呢,就是說在申請一塊記憶體進行陣列的存放的時候,slice就像陣列對外開放的一扇視窗,讓你看到想給你看到的內容。
這個比喻還是有些貼切的,但是對於理解slice的記憶體儲存和特性來說還遠遠不夠,在學習一個語言特性的時候,我比較推薦的學習方法是,實踐一遍,看看例子,然後再根據自己碰到的問題場景,選擇合適的解決方案。那麼咱們來看例子和執行結果。
2 slice使用例子和特性
整數和字串的slice操作例子和特性說明:定義,長度(len),和容量(cap)。

2.1 slice的定義和遍歷以及屬性
所以slice是依託於陣列的,並且slice資料結構定義有幾個基本屬性:len(長度),cap(容量)。可以通過make進行初始化定義的時候制定len和cap: make([]type, len, cap)
從截圖中程式碼和執行結果可以看出來,當前的slice定義中len和cap是一致的,但是slice有一個特點,當append一個新元素的時候len是增加了1,但是cap卻不是。如下圖:

2.2 slice的len和cap
一開始slice的長度len是3, 容量cap是5,然後通過append後,增加多於容量cap(初始值為5)的元素的時候,slice會重新進行空間分配,但是cap的空間是以第一次的容量cap為基準進行擴容的。
所以slice進行擴容的話,要特別注意,假如你第一個slice空間設定了1k,然後剛好滿的時候,這個時候增加1個元素,會導致slice需要2倍的記憶體空間——2k。
多維slice
3 多維slices
多維slices其實就是多維陣列的操作而已,看到例子截圖,也比較靈活,對吧。
