2014-03-30 48 views
1

多個結構我需要初始化多個結構變量正在初始化中去

假設的結構是

type Foo struct { 
    a int 
    b *Foo 
} 

而且我們說,我想初始化那些5。有沒有比下面的片段多次更乾淨的方式?

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

var a, b, c, d int 

感謝您的幫助! :)

回答

6

你可以把他們在一個聲明中,如果你想:

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

你也可以這樣做:

var s0, s1, s2 Foo 

然後用&s0&s1&s2隨後代替s0s1s2

1

你需要指針嗎?如果不是的話,那麼你的問題就完全是你的答案。只需在您的var語句中將您的類型替換爲int即可。

+0

對不起,達斯汀,你說得對。你的回答的措辭令我困惑,我已經刪除了評論。 –

1

您可以使用循環和切片來分配5個foos。

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

另一種方法是使用一個數組:

foos := [5]Foo{} 

並使用& FOOS [0],& FOOS [1],...作爲指針。

0

首選的方法是在一個工廠函數(你應該無論如何做)來包裝這個:

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

這是乾淨,簡潔,:讓您輕鬆初始化儘可能多或儘可能少如你所需。

+1

不需要循環。只需'返回make([] foo,count)'就足夠了。 'make'已經將切片的元素構造爲零值。 – rightfold

+0

我發佈了這個消息後,我想到了你的觀點 - 沒有得到測試的機會。當時我想'make'可能只是分配內存而不是'foo'實例。我編輯了一下,聽取了你的意見。:) – Vector