Go 教學示範了切片的行為,其中透過一系列操作來初始化和修改整數切片操作。演示中一個令人費解的觀察結果是,在刪除最後一行中的前兩個元素後,切片容量減少了。
切片由數組支持,並在以下位置刪除元素切片的開頭有效地移動數組內切片的起點。這減少了切片開始和數組結束之間的元素數量,從而導致容量更小。
在切片末尾刪除元素不會產生影響不影響其容量,因為它不會改變切片開始和數組結束之間的距離。切片仍然佔據後備數組中相同範圍的槽。
需要注意的是,這些操作會修改切片本身,而不是後備數組。整個過程中數組保持不變。
透過列印切片頭,我們可以更清楚地觀察變化:
<code class="go">func printSlice(s []int) { sh := (*reflect.SliceHeader)(unsafe.Pointer(&s)) fmt.Printf("header=%+v len=%d cap=%d %v\n", sh, len(s), cap(s), s) }</code>
輸出示範當元素從切片的開頭或結尾刪除時資料指標如何移動:
header=&{Data:272990208 Len:6 Cap:6} len=6 cap=6 [2 3 5 7 11 13] header=&{Data:272990208 Len:0 Cap:6} len=0 cap=6 [] header=&{Data:272990208 Len:4 Cap:6} len=4 cap=6 [2 3 5 7] header=&{Data:272990216 Len:2 Cap:4} len=2 cap=4 [5 7]
以上是為什麼一開始就刪除切片元素會減少容量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!