关于go 的append
1, 当slice基于array创建的时候,slice和array是同一段内存, slice的len, cap受限与array;
2,当append的时候, 返回的值是一个新的内存, 与源array没有关系
import "fmt" func TestSliceBaseArray(){ var data [3]string = [3]string{"1", "2", "3"} one := data[:] fmt.Println(one) two := append(one, "4") fmt.Println(len(one), cap(one), one, two) one[0] = "888" two[0] = "999" fmt.Println(one , two, data) } func main() { TestSliceBaseArray() }
有疑问加站长微信联系(非本文作者)

只有切片个数大于原底层数组的cap时,才会返回新的
第二个说法错误的,只有当你的cap小于你的len的时候,append内部才会真的重新分配内存(原CAP大小的两呗)
谢谢指出错误, 当切片的cap还没有超出源数组的cap时候, 两者的内存地址是有有关联的.