繁体   English   中英

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

[英]Why use make() to create a slice in 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)不会分配比我可以访问的更多的内存吗?

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

更多细节,可以参考: Go Slices: usage and internals

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM