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中文網其他相關文章!