gpt4 book ai didi

go - go语言make()中capacity的作用是什么?

转载 作者:IT王子 更新时间:2023-10-29 01:17:41 25 4
gpt4 key购买 nike

我正在学习golang,对slice的容量感到困惑。
例如 arr := make([]float64, 5, 10)
我有一个包含 5 个值的数组,它的容量是 10。如果我给第 8 个位置赋值,编译器会抛出一个错误索引超出范围。如果我增长一个 slice ,但它会创建一个新 slice (请参阅我从官方 go 语言复制的文档)。

这是 slice 文档:

“slice 不会复制 slice 的数据。它会创建一个指向原始数组的新 slice 值。”“要增加 slice 的容量,必须创建一个新的、更大的 slice 并将原始 slice 的内容复制到其中。”

那么容量的目的是什么?

谢谢

最佳答案

一个 slice 包含三个部分。指向底层数组、长度和容量的指针。长度是根据程序逻辑的数组长度,容量是底层数组的真实长度。

容量是固定的,不需要重新分配。只要最终长度不超过容量,就可以随时更改长度。在这种情况下,您可以执行 arr[:7] 并且您的数组长度为 7,但容量仍为 10。如果执行 arr[:11],您将得到一个错误,因为如果不重新分配就无法将 slice 增大到那么大。

您可能想阅读此内容以更深入地讨论 slice : http://blog.golang.org/go-slices-usage-and-internals

关于go - go语言make()中capacity的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28636235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com