在Go中,var s []int和s := make([]int, 0)有什么区别?
我发现这两种方法都有效,但哪一种更好?
发布于 2014-08-28 08:21:28
除了富丽的回答之外,您还可以在"Go切片:使用和内部“中看到更多的示例,其中提到了对[]int的使用:
由于片的零值(
nil)的作用类似于零长度片,所以可以声明一个片变量,然后在循环中追加到它:
// 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
}这意味着,要追加到片中,不需要首先分配内存:nil片p int[]就足够添加到其中了。
发布于 2014-08-28 07:55:25
简单声明
var s []int不分配内存,s指向nil,而
s := make([]int, 0)将内存分配给内存,s将内存指向具有0元素的片。
通常,如果您不知道用例的确切大小,那么第一个就更惯用了。
发布于 2019-03-09 23:15:03
刚刚发现了一个不同之处。如果您使用
var list []MyObjects然后将输出编码为JSON,得到null。
list := make([]MyObjects, 0)[]结果与预期相符。
https://stackoverflow.com/questions/25543520
复制相似问题