申报片或制作片?

在Golang中, var s []ints := 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点分配给一个片。

通常情况下,如果你不知道你的用例的确切大小,第一个更习惯于使用。