cap主要是為了讓slice提供可變長度。
試想,如果沒有cap,只有len。 (建議學習:go)
sliceA長度為10,len=10,已經插滿元素;現在要插入第十個元素。
做法
sliceA的長度擴充為20,len=20,此時有用元素為11個,還有9個空位。
sliceA對外界暴露出來的介面只有ptr和len=20,此時如果需要再插入一個元素。
到底sliceA該擴充呢還是可以繼續在原來的基礎直接插入呢,同時又該從哪個index插入呢?
這些問題在有了len和cap的組合之後就可以迎刃而解了。
cap()可以用來查看數組或slice的容量
#在數組中由於長度固定不可變,因此len(arr)和cap(arr)的輸出永遠相同
在slice中,len(sli)表示可見元素有幾個(也即直接列印元素看到的元素個數),而cap(sli)表示所有元素有幾個,例如:
arr := []int{2, 3, 5, 7, 11, 13} sli := arr[1:4] fmt.Println(sli) fmt.Println(len(sli)) fmt.Println(cap(sli))
cap()函數傳回的是陣列切片分配的空間大小。
package main import "fmt" func main() { mySlice := make([]int, 5, 10) fmt.Println("len(mySlice):", len(mySlice)) fmt.Println("cap(mySlice):", cap(mySlice)) }
該程式的輸出結果為:
len(mySlice): 5 cap(mySlice): 10
以上是golang cap是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!