Go语言Slice切片操作会使原数据出现混乱的原因是什么

本篇内容介绍了“Go语言Slice切片操作会使原数据出现混乱的原因是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

10余年的新干网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销的优势是能够根据用户设备显示端的尺寸不同,自动调整新干建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联建站从事“新干网站设计”,“新干网站推广”以来,每个客户项目都认真落实执行。

在学习Go语言的过程中,都知道可以通过切片操作来切割切片
例如

sl := make([]int,10)
a = sl[1:] //表示取下标为1开始的元素到最后
b = sl[:5] //表示取下标从0开始的元素到下标为4的元素
c = sl[1:5] //表示取下标从1开始的元素到下标为4的元素
d = sl[1:5:6] //表示取下标从1开始的元素到下标为4开始的元素,并且设置新切片的容量为6   *注意,这个操作想到于对原切片进行来一个深拷贝,很关键

当获取切片通过[m:n]进行时获取的切片都是基于原切片的底层数组的,即你该片新切片中某个数据时,原切片的数据也会被改变,这通常不是我们想要的,当然,如果使用append()来对新切片进行操作时如果没有发生扩容,那么原切片的值也会改变,所以,建议在进行切片获取操作的时候尽量使用[m:n:s]这样通常都是开辟一个新的空间来拷贝原切片的数据,当然如果进行切片操作是要改变原切片,那么还是尽量使用[m:n],那么这样会节省内存开辟的空间

代码演示:

	a := [10]int{1, 2}
	i := a[:6]
	y := []int{3,4}
	fmt.Printf("a->%d,a->%v\n", cap(a), a)
	fmt.Printf("i->%d,i->%v\n", cap(i), i)
	fmt.Printf("y->%d,y->%v\n", cap(y), y)

	fmt.Println("==============================")

	//i[0]=100
	//fmt.Printf("a->%d,a->%v\n", cap(a), a)
	//fmt.Printf("i->%d,i->%v\n", cap(i), i)
	//fmt.Printf("y->%d,y->%v\n", cap(y), y)
	//fmt.Println("==============================")

	i = append(i, y...)
	fmt.Printf("a->%d,a->%v\n", cap(a), a)
	fmt.Printf("i->%d,i->%v\n", cap(i), i)
	fmt.Printf("y->%d,y->%v\n", cap(y), y)

结果:

a->10,a->[1 2 0 0 0 0 0 0 0 0]
i->10,i->[1 2 0 0 0 0]
y->2,y->[3 4]
==============================
a->10,a->[1 2 0 0 0 0 3 4 0 0]
i->10,i->[1 2 0 0 0 0 3 4]
y->2,y->[3 4]

“Go语言Slice切片操作会使原数据出现混乱的原因是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


新闻名称:Go语言Slice切片操作会使原数据出现混乱的原因是什么
转载来源:http://pwwzsj.com/article/josejh.html