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

青灯夜游
發布: 2019-12-25 18:02:46
原創
3337 人瀏覽過

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

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!