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

Lan*_*nce 2 go

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

这是切片文档:

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

那么容量的目的是什么?

谢谢

Ste*_*erg 10

切片有三个部分.指向底层数组,长度和容量的指针.长度是根据程序逻辑的数组长度,容量是底层数组的真实长度.

容量是固定的,无需重新分配.只要最终长度不超过容量,就可以随时更改长度.在这种情况下,您可以这样做arr[:7],您的阵列将是长度为7但仍然是容量10.如果这样做arr[:11],您将收到一个错误,因为如果没有重新分配,您将无法增大切片.

您可能需要阅读本文以获得更深入的切片讨论:http: //blog.golang.org/go-slices-usage-and-internals

  • append()仅在需要时才创建新切片.它还会预先分配比所需更多的空间,因此每次都不会完整复制.http://play.golang.org/p/U5hh-m-eUB (4认同)
  • 感谢你的回答。这就是我正在阅读的博客。我只是没有看到我需要它的用法。然而我发现它对于“copy()”很有用,但“append()”显然创建了一个新切片。 (2认同)