2013-07-29 44 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