在go中初始化多个结构

时间:2014-03-30 06:33:50

标签: struct go

我需要初始化多个struct变量

让我们说结构是

type Foo struct {
  a int
  b *Foo
}

让我们说我想初始化其中的5个。有多干净的方式比下面的片段多次?

s0 := &Foo{}
s1 := &Foo{}
s2 := &Foo{}

类似

var a, b, c, d int

感谢您的帮助! :)

4 个答案:

答案 0 :(得分:6)

如果您愿意,可以将它们放在一个陈述中:

s0, s1, s2 := new(Foo), new(Foo), new(Foo)

你也可以这样做:

var s0, s1, s2 Foo

然后使用&s0&s1&s2代替s0s1s2

答案 1 :(得分:1)

你需要指针吗?如果没有,你的答案就完全没问题了。只需在var语句中将int替换为您的类型。

答案 2 :(得分:1)

您可以使用循环和切片分配5个foos。

 foos := make([]*Foo, 5)
 for i := range foos {
     foos[i] = &Foo{}
 }

另一种方法是使用数组:

 foos := [5]Foo{}

并使用& foos [0],& foos [1],......作为指针。

答案 3 :(得分:0)

首选方法是将其包装在工厂函数中(无论如何应该这样做):

func NewFoos(count int) []foo {
    return make([]foo, count, count)
}

这是干净,简洁和:允许您根据需要轻松初始化。