有什么区别: x := make([]int, 5, 10) x := make([]int, 5) x := [5]int{}我知道make分配一个数组并返回一个引用该数组的切片。不明白哪里可以用?我找不到一个很好的例子来澄清这种情况。
1 回答
皈依舞
TA贡献1851条经验 获得超3个赞
x := make([]int, 5)
制作长度为 5 和容量为 5 的切片(int
与长度相同)。
x := make([]int, 5, 10)
使切片的int
长度为5和10的容量。
x := [5]int{}
使得阵列的int
长度为5。
切片
如果您需要使用函数添加比切片容量更多的项目append
,go runtime 将分配新的底层数组并将现有数组复制到其中。因此,如果您知道切片的估计长度,最好使用显式容量声明。一开始它会为底层数组消耗更多内存,但对于许多分配和数组复制来说是安全的 CPU 时间。
你可以探索如何len
和cap
改变 while append
,使用这个简单的测试Go playground
每当cap
值改变时,新数组分配
数组
数组大小是固定的,因此如果您需要增加数组,您必须创建一个具有新长度的新数组,然后自己将旧数组复制到其中。
在 go 中有一些关于切片和数组的很棒的文章:
http : //blog.golang.org/go-slices-usage-and-internals
http://blog.golang.org/slices
- 1 回答
- 0 关注
- 182 浏览
添加回答
举报
0/150
提交
取消