go语言的切片特性
概述:
在使用切片进行赋值的时候,产生新的数组的指针指向原来的数组,只要修改新数组中的元素时,原来数组的元素也会改变。
测试代码:
func TestSliceShareMemory(t *testing.T) { year := []string{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"} Q2 := year[3:6] t.Log(Q2, len(Q2), cap(Q2)) summer := year[5:8] t.Log(summer, len(summer), cap(summer)) summer[0] = "Unknow" t.Log(Q2) t.Log(year) }
测试结果:
可以看到,修改了summer数组中的第一个元素为“Unkown”,结果Q2数组中的元素也会改变,而summer 和 Q2 都指向的是 year ,所以可以看到year 数组中的元素也发现了改变。这里切片实现了共享存储结构。如下图所示: