申报片或制作片?
在Golang中, var s []int
和s := make([]int, 0)
什么区别?
我发现两者都有效,但哪一个更好?
除了fabriziom的回答 ,你可以在“ Go Slices:usage and internals ”中看到更多的例子,其中提到了[]int
的用法:
由于一个slice(
nil
)的零值就像一个零长度片 ,所以你可以声明一个slicevariables,然后在一个循环中追加它:
// Filter returns a new slice holding only // the elements of s that satisfy f() func Filter(s []int, fn func(int) bool) []int { var p []int // == nil for _, v := range s { if fn(v) { p = append(p, v) } } return p }
这意味着,为了追加到一个slice,你不必先分配内存: nil
slice p int[]
就足够作为要添加的片。
简单的声明
var s []int
不分配内存和s
指向nil
,而
s := make([]int, 0)
用0个元素将存储器和s
点分配给一个片。
通常情况下,如果你不知道你的用例的确切大小,第一个更习惯于使用。