为什么使用make()在Go中创建切片?

时间:2013-02-24 02:34:48

标签: go

  • var a [4]intb := make([]int, 4)之间有什么区别? b可以延长,但不能a,对吗?但是,如果我知道我真的需要4个元素,那么比阵列快一个数组吗?

  • var d []inte := make([]int)之间是否存在性能差异? f := make([]int, 5)会提供比没有第一个即5个元素的长度更多的性能吗?

  • c := make([]int, 5, 10)会不会分配比我可以访问的内存更多的内存吗?

1 个答案:

答案 0 :(得分:7)

  • a是一个数组,b是一个切片。切片与数组的不同之处在于切片是指向数组的指针;切片是引用类型,这意味着如果指定一个切片 另一个,都引用相同的底层数组。例如,如果一个函数需要一个 slice参数,对切片元素所做的更改对调用者是可见的, 类似于将指针传递给底层数组(从Learning Go开始)。您可以轻松地将appendcopy与切片一起使用。数组应该比切片快一点,但它没有太大的区别。除非你确切地知道尺寸,否则最好使用切片使事情变得简单。
  • make([]类型,长度,容量),您可以估计尺寸和可能的容量,以提高性能。

更多详细信息,您可以参考:Go Slices: usage and internals