Go 切片
阿新 • • 發佈:2018-07-29
垃圾 操作符 存在 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 切片