我认为append
在go中会返回一个新结果,但我发现在同一切片中追加会返回相同的内存地址:
func TestRuneAppend3(t *testing.T) {
r := make([][]rune, 256)
r[0] = append(r[0], 99) // c
r[1] = append(r[0], 100) // d
r[2] = append(r[0], 101) // e
// I thought it would be "c cd ce", but it is "c ce ce"
log.Println(string(r[0]), string(r[1]), string(r[2]))
}
那么,如果我想要结果的最佳方法是c cd ce
?
答案 0 :(得分:3)
如果您要追加的切片中没有足够的容量,则附加只会分配一个新数组。如果您需要一个单独的数组,请使用make
创建一个新切片,并使用copy
从原始切片中复制您需要的任何内容。
This article可以很好地解释切片是如何工作的。