2013-07-29 42 views
2

所以,我想要習慣去!並且我遇到了一個問題,我嘗試製作一個包含切片的新數據類型「RandomType」。切片:添加到結構中的切片的問題

package main 

type RandomType struct { 
    RandomSlice []int 
} 

func main() { 
    r := new(RandomType) 
    r.RandomSlice = make([]int, 0) 
    append(r.RandomSlice, 5) 
} 

這段代碼產生錯誤:

append(r.RandomSlice, 5) not used 

但是例如,如果我試圖用

type RandomType struct { 
    RandomInt int 
} 

func main() { 
    r := new(RandomType) 
    r.RandomInt = 5 
} 

能正常工作。

不知道我在做什麼錯。

回答

10

append不會更改您提供的切片,但會建立一個新切片。

您必須使用返回片:

r.RandomSlice = append(r.RandomSlice, 5) 

更多關於追加in Effective Goin the Go blog細節。

+0

有時候,並不總是,'append'會分配一個新的分片。 「如果s的容量不足以適應附加值,那麼append會分配一個新的足夠大的分片,以適應現有分片元素和附加值。因此,返回的分片可能指向不同的基礎數組「。 – peterSO

+0

@peterSO是的,但我不確定你爲什麼這樣說:底層數組可能是相同的,但切片總是不同的,這是一個錯誤,不使用append的返回值(這很好,因爲它可能避免許多錯誤)。 –

+0

哦,很酷。我一直在考慮追加工作,就像它在Python中所做的那樣。它不...... – Greg