首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >声明切片还是制造切片?

声明切片还是制造切片?
EN

Stack Overflow用户
提问于 2014-08-28 07:51:54
回答 4查看 84.6K关注 0票数 142

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

我发现这两种方法都有效,但哪一种更好?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-08-28 08:21:28

除了富丽回答之外,您还可以在"Go切片:使用和内部“中看到更多的示例,其中提到了对[]int的使用:

由于片的零值(nil)的作用类似于零长度片,所以可以声明一个片变量,然后在循环中追加到它:

代码语言:javascript
复制
// 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
}

这意味着,要追加到片中,不需要首先分配内存:nilp int[]就足够添加到其中了。

票数 107
EN

Stack Overflow用户

发布于 2014-08-28 07:55:25

简单声明

代码语言:javascript
复制
var s []int

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

代码语言:javascript
复制
s := make([]int, 0)

将内存分配给内存,s将内存指向具有0元素的片。

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

票数 154
EN

Stack Overflow用户

发布于 2019-03-09 23:15:03

刚刚发现了一个不同之处。如果您使用

代码语言:javascript
复制
var list []MyObjects

然后将输出编码为JSON,得到null

代码语言:javascript
复制
list := make([]MyObjects, 0)

[]结果与预期相符。

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25543520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档