之间有什么区别?
x := make([]int, 5, 10)
x := make([]int, 5)
x := [5]int{}
我知道make
分配一个数组并返回一个引用该数组的切片。我不知道可以在哪里使用?
我找不到很好的例子来说明情况。
x := make([]int, 5)
使切片的int
长度为5和容量5(同长度)。
x := make([]int, 5, 10)
使切片的int
长度为5和10的容量。
x := [5]int{}
使得阵列的int
长度为5。
如果您需要使用函数添加超出切片容量的项append
,则go runtime将分配新的基础数组并将现有的数组复制到其中。因此,如果您知道切片的估计长度,最好使用显式容量声明。在开始时,它将为基础数组消耗更多的内存,但是对于许多分配和数组复制来说,这是安全的cpu时间。
您可以使用上的简单测试探索每次更改的方式len
和方式,每次更改值时,都会分配新的数组cap
append
Go playgroundcap
数组大小是固定的,因此,如果需要增加数组大小,则必须创建一个具有新长度的新数组,然后将自己的旧数组复制到其中。
go中有一些关于切片和数组的出色文章:
http : //blog.golang.org/go-slices-usage-and-internals
http://blog.golang.org/slices
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句