go语言make()的容量目的是什么?


What is the purpose of capacity in make() of go language?

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

这是切片医生:

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

那么容量的目的是什么呢?

谢谢


一片有三部分。指向基础数组、长度和容量的指针。根据程序逻辑,长度是数组的长度,容量是底层数组的真实长度。

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

您可能希望阅读本文,以便更深入地讨论切片:http://blog.golang.org/go-slices-usage-and-internals