Slice使用的一个问题

buaatianwanli · · 1780 次点击
我明白了,这个问题不是struct的值对应的slice是否变化的问题,本质是slice的底层数组表示。 你可能也注意到了,如果使用s = append(s, 1)和s[0]=1结果不太一样,对吧? 请看这段代码: ``` package main import ( "fmt" ) func main() { var s []int fmt.Printf("\t %v - %p - %p\n", s, s, &s) s = make([]int, 0, 1) fmt.Printf("\t %v - %p - %p\n", s, s, &s) s = append(s, 1) fmt.Printf("\t %v - %p - %p\n", s, s, &s) copy := s fmt.Printf("\t %v - %p - %p\n", copy, copy, &copy) copy[0] = 2 fmt.Printf("\t %v - %p - %p\n", copy, copy, &copy) fmt.Printf("\t %v - %p - %p\n", s, s, &s) } ``` 运行结果是: ``` [] - 0x0 - 0xc820056080 [] - 0xc82005c1c0 - 0xc820056080 [1] - 0xc82005c1c0 - 0xc820056080 [1] - 0xc82005c1c0 - 0xc820056180 [2] - 0xc82005c1c0 - 0xc820056180 [2] - 0xc82005c1c0 - 0xc820056080 ``` 也就是被copy变量和原变量是共用了底层数组,所以修改copy之后,原来的slice也会被修改(直到超出容量之后重新分配底层数组)。
#13
更多评论
各位大拿给出宝贵意见
#1
hua666777
程序猿钱多活少。
看起来好难1
#2