1. 程式人生 > >Go 切片

Go 切片

垃圾 操作符 存在 style bsp aci ring slice sub

切片是什麽?一種數據結構,類似數組,圍繞動態數組的概念而設計,可按需自動改變大小

切片內部實現?切片基於數組實現,底層是數組(故底層的內存是連續分配,可根據索引獲取數據,可叠代以及垃圾回收),自身非常(切片對象只有3個字段數據結構即:指向底層數組的指針ptr、切片長度len、切片容量cap),可看作對底層數組的抽象

切片如何聲明?創建方式多樣,比如make、或指定初始化值或基於現有切片(數組)創建

方法一簡潔如make make([]T, length, capacity) ,比如 slice := make([]int,5) 指定切片長度為5, slice:=make([]int

,5,10) 指定切片長度5,容量10(對應的是切片底層數組)

註:容量為10,但長度為5,故我們只能訪問5個元素,剩下的5個元素需要切片擴充後才可訪問。且容量>=長度。

方法二使用自變量:指定初始化值 slice := []int{1,2,3,4,5}

方法三基於現有切片(數組)創建, s := arr[startIndex:endIndex] //前閉後開 使用 [i:j] 操作符表示以i到j的左閉右開,類似Java的subString方法。

切片初始值?切片底層為數組,創建切片不指定字面值,默認為數組元素的零值。類似數組,初始化可以為:

//數組初始化  array := [5]int{4:1}
slice := []int{4:1}

nil切片與空切片區別?長度、容量都為0.

nil切片(比如: var nilSlice []int )指向底層數組的指針為nil,nil切片表示不存在的切片。

空切片(比如: slice := []int{} )對應的指針是個地址,空切片表示一個空集合

Go 切片