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)
会不会分配比我可以访问的内存更多的内存吗?
答案 0 :(得分:7)
a
是一个数组,b
是一个切片。切片与数组的不同之处在于切片是指向数组的指针;切片是引用类型,这意味着如果指定一个切片
另一个,都引用相同的底层数组。例如,如果一个函数需要一个
slice参数,对切片元素所做的更改对调用者是可见的,
类似于将指针传递给底层数组(从Learning Go开始)。您可以轻松地将append
和copy
与切片一起使用。数组应该比切片快一点,但它没有太大的区别。除非你确切地知道尺寸,否则最好使用切片使事情变得简单。更多详细信息,您可以参考:Go Slices: usage and internals