首页 > 解决方案 > 使用 make 函数创建结构切片时默认添加空元素

问题描述

我有一个定义如下所示的结构:

type abc struct {
  srcName string
  destName string
  flag    bool  'default:false'
}

在我的代码中,我使用 make 函数对其进行初始化

var abcList []abc

func init() {
    abcList = make([]abc, 1)
}

func main() {
 var abcElem abc

 abc.srcName = "src"
 abc.destName = "dest"
 abc.flag  = true

 abcList = append(abcList, abc)

 klog.Info("abcList:", abcList)
}

我看到输出为:

abcList: [{    false} {"src", "dest", true}]

想知道为什么要添加默认值的切片元素。这不是一件错误的事情吗?如果我用更大的容量初始化这个切片,那么我会看到许多具有默认值的此类元素。它在迭代这个切片时增加了额外的成本。

标签: goslice

解决方案


你需要做:

make([]abc, 0, 1)

第二个参数是片数,第三个是容量。

如果你用它初始化一个切片,s := make([]abc, 1)它将包含一个空元素。您可以使用 覆盖该元素s[0] = xyz。如果您append进入切片,则空元素将保留并添加新元素。

注意:init这里不需要该函数。你可以这样做:

// package level declaration
var abcList = make([]abc, 0, 1)

推荐阅读