我学习golang,并对片中的容量感到困惑
例如arr := make([]float64, 5, 10)
我有一个包含5个值的数组,其容量为10.如果我将值赋给第8个位置,编译器将抛出错误索引超出范围。如果我生长一个切片,但它会创建一个新切片(请参阅我从官方语言中复制的文档)。
这里是切片doc:
"切片不会复制切片的数据。它创建一个指向原始数组的新切片值。" "要增加切片的容量,必须创建一个新的更大的切片并将原始切片的内容复制到切片中。 "
那么容量的目的是什么?
由于
答案 0 :(得分:10)
切片有三个部分。指向底层数组,长度和容量的指针。长度是根据程序逻辑的数组长度,容量是底层数组的真实长度。
无需重新分配即可修复容量。只要最终长度不超过容量,就可以随时更改长度。在这种情况下,您可以执行arr[:7]
并且您的数组将是长度为7但仍然是容量10.如果您执行arr[:11]
,则会出现错误,因为您无法生成大的切片再分配。
您可能需要阅读本文,以便更深入地讨论切片: http://blog.golang.org/go-slices-usage-and-internals