首頁  >  文章  >  後端開發  >  golang數組與切片的差別是什麼?

golang數組與切片的差別是什麼?

青灯夜游
青灯夜游原創
2019-12-25 18:02:463449瀏覽

golang數組與切片的差別是什麼?

golang中數組和切片的區別:

#● 切片是指標類型,數組是值類型

● 數組的長度是固定的,而切片不是(切片是動態的數組)

● 切片比數組多一個屬性:容量(cap)

● 切片的底層是數組

相關建議:golang教學

既然一個是指標類型,一個是值類型,那麼差異體現在哪裡呢?

看下這個範例

	numbers := []int{1, 2, 3, 4, 5, 6}
	for i, e := range numbers {
		if i == len(numbers)-1 {
			numbers[0] += e
		} else {
			numbers[i+1] += e
		}
	}
	fmt.Println(numbers)

結果為:

[22 3 6 10 15 21]

將切片換成陣列:

	numbers := [...]int{1, 2, 3, 4, 5, 6}
	for i, e := range numbers {
		if i == len(numbers)-1 {
			numbers[0] += e
		} else {
			numbers[i+1] += e
		}
	}
	fmt.Println(numbers)

結果為:

[7 3 5 7 9 11]

顯而易見:遍歷完後,數組中的每個元素都變成了當前元素和前一個元素的和;切片中也是這樣,只不過每個元素都變成了前一個元素改變後的值和當前元素的和。

分析:for迴圈時,numbers中的元素是{1,2,3,4,5,6}。接收for迴圈的變數為i和e,i都是[0,1,2,3,4,5]。而e不同,數組為值傳遞,所以遍歷數組時,e為{1,2,3,4,5,6}; 切片傳遞的是指針,所以每次累加,都是改變後的值來累加。

以上是golang數組與切片的差別是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn