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 数组中的元素也发现了改变。这里切片实现了共享存储结构。如下图所示:

 

 

posted @ 2022-07-19 23:14  nLesxw  阅读(27)  评论(0编辑  收藏  举报