我正在学习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
| 归档时间: |
|
| 查看次数: |
1587 次 |
| 最近记录: |