一個(gè)切片(slice) 是一個(gè)數(shù)組某個(gè)部分的引用。
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了寧陜免費(fèi)建站歡迎大家使用!
1、切片初始化
(1)、通過內(nèi)置函數(shù)make初始化:
slice := make([]Type,len,[cap])
[]Type,某種類型的數(shù)組;
Len 表示切片數(shù)據(jù)長(zhǎng)度;
Cap 表示切片容量,cap >= len,該參數(shù)可選,默認(rèn)cap=len
例如: slice := make([]string,5) //初始化一個(gè)字符串類型的切片,長(zhǎng)度和容量均為5
slice := make([]string,5,10) //初始化一個(gè)字符串類型的切片,長(zhǎng)度為5,容量為10
(2)、通過現(xiàn)有數(shù)組來初始化
slice := arr[startIndex:endIndex] //startIndex,endIndex可選,startIndex默認(rèn)為0,endIndex默認(rèn)為arr長(zhǎng)度,取得的數(shù)組下標(biāo)是[startIndex:endIndex) 左閉右開區(qū)間
例如: arr := […]string{"aaa","bbb","ccc","ddd"}
slice := arr[1:4] //[1:4) 共3個(gè)元素創(chuàng)建一個(gè)切片
slice := arr[:4] //[0:4) 共4個(gè)元素創(chuàng)建一個(gè)切片
slice := arr[1:] //[1:len(arr))
slice := arr[:] //[0:len(arr))
通過現(xiàn)有數(shù)組來初始化的切片,其長(zhǎng)度為len = endIndex-startIndex,cap=len
也可以用 slice := arr[1:2:3] 來指定切片的cap,cap+startIndex <= len(arr)
2、append 操作
切片初始化后,可以使用append來追加元素: append(slice []Type,elems …Type)
例如: sss := make([]string,0,10)
sss = append(sss,"aaaa")
3、append操作引起的改變
(1)、當(dāng)切片容量不夠時(shí),append操作會(huì)對(duì)cap擴(kuò)容,cap擴(kuò)容長(zhǎng)度遵循以下規(guī)則:如果當(dāng)前cap小于1024,則擴(kuò)容當(dāng)前大小,即擴(kuò)容后的cap是當(dāng)前2倍,如果當(dāng)前cap大于等于1024,則每次增長(zhǎng)當(dāng)前大小的1/4
(2)、當(dāng)切片容量不夠時(shí),append 操作會(huì)引起切片內(nèi)存地址的變化,即,當(dāng)len=cap時(shí),append操作會(huì)開辟一塊內(nèi)存區(qū)域,將現(xiàn)有切片內(nèi)容復(fù)制過去;
從現(xiàn)有數(shù)組初始化切片時(shí),得到的切片地址與初始化切片數(shù)組索引startIndex元素的地址一致,且切片是該數(shù)組對(duì)因數(shù)據(jù)的引用,數(shù)組元素改變,切片元素也改變,當(dāng)cap需要擴(kuò)容時(shí),切片地址發(fā)生改變后,切片與數(shù)組之間的引用關(guān)系解除,數(shù)組元素改變,切片元素不會(huì)改變