主頁 > 知識庫 > golang-切片slice的創(chuàng)建方式

golang-切片slice的創(chuàng)建方式

熱門標(biāo)簽:寧波語音外呼系統(tǒng)公司 宿遷便宜外呼系統(tǒng)代理商 重慶慶云企業(yè)400電話到哪申請 鄭州智能語音電銷機(jī)器人價(jià)格 湛江crm外呼系統(tǒng)排名 仙桃400電話辦理 上海極信防封電銷卡價(jià)格 地圖標(biāo)注免費(fèi)定制店 不封卡外呼系統(tǒng)

在創(chuàng)建一個(gè)新的切片是都會(huì)先創(chuàng)建一個(gè)長度為len的數(shù)組,并為其開辟一個(gè)cap長度為cap的額外空間,所以在cap范圍類增加元素,數(shù)組的起始地址不會(huì)改變,否則會(huì)創(chuàng)建一個(gè)新的數(shù)組,即起始的位置發(fā)生改變

數(shù)組創(chuàng)建

代碼

intArr:=[...]int{1,2,3,4,5,6,7,9}
//方式一指定開始和結(jié)束
s:=intArr[1:3]
//方式er指定開始和結(jié)束+容量
s:=intArr[1:3:6]

創(chuàng)建后的slice

[a: b :c]

a:起始位置

b:截取數(shù)據(jù)的結(jié)束位置 默認(rèn)到末端)

c:截取后的容量位置 默認(rèn)到末端)

len為截取的元素長度 即:(3 - 1=2)

cap為截取的起始元素到素組最后一個(gè)元素的長度 即:

(原數(shù)組長度:8 - 起始元素1=7)

底層數(shù)組: 為原數(shù)組的截取的起始元素到素組最后一個(gè)元素

make創(chuàng)建

代碼

s:=make([]int,10,20)

創(chuàng)建后的slice

len為:10

cap為:20(在創(chuàng)建時(shí)指定)

底層數(shù)組: 長度為10的數(shù)組

slice擴(kuò)容

在cap范圍內(nèi)不會(huì)創(chuàng)建新的底層數(shù)組

超過cap則會(huì)創(chuàng)建新的數(shù)組 ,生成新的cap和len 超過cap也會(huì)的

補(bǔ)充:golang 中使用數(shù)組創(chuàng)建slice時(shí)的注意事項(xiàng)

golang中,slice是對固定長度數(shù)組的一段切片,其底層是用對數(shù)值空間的指針實(shí)現(xiàn)的。

在golang中當(dāng)使用一個(gè)數(shù)組來創(chuàng)建slice時(shí)如:

var array [5]int = [5]int{1,2,3,4,5}
//切割出數(shù)組中的4個(gè)值,創(chuàng)建一個(gè)slice
myslice := array[0:4]

打印array的值為:

1, 2, 3, 4, 5

打印mysqlice的值為:

1, 2, 3, 4

現(xiàn)在我們對myslice進(jìn)行append操作

myslice = append(myslice,100)

打印array的值為:

1, 2, 3, 4, 100

打印mysqlice的值為:

1, 2, 3, 4, 100

現(xiàn)在我們再對myslice進(jìn)行修改操作

myslice[0] = 50

打印array的值為:

50, 2, 3, 4, 100

打印mysqlice的值為:

50, 2, 3, 4, 100

當(dāng)slice的長度沒有超過創(chuàng)建是的數(shù)組的長度時(shí),slice還是指向的創(chuàng)建時(shí)使用的數(shù)組。

但是!

現(xiàn)在myslice的長度已經(jīng)和用來創(chuàng)建slice時(shí)使用的數(shù)組的長度一致了

我們再對myslice進(jìn)行append操作,讓myslice的長度大于創(chuàng)建時(shí)使用的數(shù)組的長度

myslice = append(myslice,200)

打印array的值為:

50, 2, 3, 4, 100

打印mysqlice的值為:

50, 2, 3, 4, 100, 200

myslice不是通過指針的方式跟arr建立關(guān)聯(lián)的嗎?為毛這種情況卻沒有改變arr的值呢?

因?yàn)楫?dāng)myslice超出arr的長度時(shí),Go語言會(huì)隱含式地對array做了copy,并讓myslice內(nèi)部的指針重新指向了新數(shù)值,所以一切預(yù)期中修改array的值的操作,都不會(huì)生效!

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • Golang 拷貝Array或Slice的操作
  • golang中的空slice案例
  • Golang::slice和nil的對比分析
  • golang語言如何將interface轉(zhuǎn)為int, string,slice,struct等類型
  • Golang中的Slice與數(shù)組及區(qū)別詳解
  • golang中range在slice和map遍歷中的注意事項(xiàng)
  • golang slice元素去重操作

標(biāo)簽:銅川 蘭州 雞西 欽州 梅河口 重慶 吐魯番 汕頭

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang-切片slice的創(chuàng)建方式》,本文關(guān)鍵詞  golang-,切片,slice,的,創(chuàng)建,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《golang-切片slice的創(chuàng)建方式》相關(guān)的同類信息!
  • 本頁收集關(guān)于golang-切片slice的創(chuàng)建方式的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章