声明切片还是制作切片?

新手上路,请多包涵

在围棋中, var s []ints := make([]int, 0) 之间有什么区别?

我发现两者都有效,但哪个更好?

原文由 Wang Yi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 623
2 个回答

除了 fabriziom回答 之外,您还可以在“ Go Slices: usage and internals ”中看到更多示例,其中提到了 []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[] 足以作为要添加的切片。

原文由 VonC 发布,翻译遵循 CC BY-SA 3.0 许可协议

简单声明

var s []int

不分配内存和 s 指向 nil ,而

s := make([]int, 0)

分配内存并 s 将内存指向具有 0 个元素的切片。

通常,如果您不知道用例的确切大小,第一个更为惯用。

原文由 fabrizioM 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏