[英]Why use make() to create a slice in Go?
var a [4]int
和b := make([]int, 4)
什么区别? b
可以扩展,但不能扩展a
,对吗? 但是如果我知道我真的需要 4 个元素,那么数组是否比切片更快?
var d []int
和e := make([]int)
之间有什么性能差异吗? f := make([]int, 5)
比没有前 5 个元素的长度提供更多的性能吗?
这个c := make([]int, 5, 10)
不会分配比我可以访问的更多的内存吗?
a
是一个数组, b
是一个切片。 切片与数组的不同之处在于切片是指向数组的指针; 切片是引用类型,这意味着如果将一个切片分配给另一个切片,则它们都引用相同的底层数组。 例如,如果一个函数接受一个切片参数,它对切片元素所做的更改将对调用者可见,类似于传递一个指向底层数组的指针(以上来自Learning Go )。 您可以轻松地使用切片进行append
和copy
。 Array 应该比 slice 快一点,但它没有太大区别。 除非您确切地知道大小,否则最好使用使事情变得简单的切片。更多细节,可以参考: Go Slices: usage and internals
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.