溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go語言Slice切片操作會使原數據出現混亂的原因是什么

發布時間:2021-06-25 14:20:56 來源:億速云 閱讀:374 作者:chen 欄目:大數據

本篇內容介紹了“Go語言Slice切片操作會使原數據出現混亂的原因是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

在學習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切片操作會使原數據出現混亂的原因是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女