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

use*_*828 1 go

  • var a [4]int和之间有什么区别b := make([]int, 4)?在b可扩展,但不是a吧?但是,如果我知道我真的需要4个元素,那么一个数组比一个切片更快吗?

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

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

Joe*_*Joe 7

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

更多细节,你可以参考:Go Slices:用法和内部

  • ......加上一个容量. (5认同)
  • slice是指向数组中某个位置加上长度的指针 (3认同)