为什么在删除前 n 个项目时切片的容量会发生变化?
在 Go 中,切片被实现为结构,类似于以下内容:
<code class="go">type slice struct { array unsafe.Pointer len int cap int }</code>
如果我们修改用于打印切片的函数以包含指向底层数组的指针,我们会得到以下输出:
ptr=0x450000 len=6 cap=6 [2 3 5 7 11 13] ptr=0x450000 len=4 cap=6 [2 3 5 7] ptr=0x450008 len=2 cap=4 [5 7]
如您所见,删除最后两项确实不改变指针,而删除前两项则改变。这是因为切片本质上是底层数组的一个窗口。从开头删除项目会强制使用不同的指针在新位置重新创建切片,而从末尾删除项目只会调整现有切片的长度。
有关更多信息,请参阅以下内容资源:
以上是为什么从 Go 切片的开头删除元素会改变其容量?的详细内容。更多信息请关注PHP中文网其他相关文章!