最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
怎么拷貝golang的slice-創(chuàng)新互聯(lián)

slice理解

堅守“ 做人真誠 · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價值觀,專業(yè)網(wǎng)站建設(shè)服務(wù)10余年為成都成都木屋小微創(chuàng)業(yè)公司專業(yè)提供企業(yè)網(wǎng)站制作營銷網(wǎng)站建設(shè)商城網(wǎng)站建設(shè)手機網(wǎng)站建設(shè)小程序網(wǎng)站建設(shè)網(wǎng)站改版,從內(nèi)容策劃、視覺設(shè)計、底層架構(gòu)、網(wǎng)頁布局、功能開發(fā)迭代于一體的高端網(wǎng)站建設(shè)服務(wù)。

golang 的slice是一個指向底層的數(shù)組的指針結(jié)構(gòu)體。

slice 方法返回一個包含 stringObj 的指定部分的 String 對象。

slice 方法一直復(fù)制到 end 所指定的元素,但是不包括該元素。如果 start 為負(fù),將它作為 length + start處理,此處 length 為數(shù)組的長度。如果 end 為負(fù),就將它作為 length + end 處理,此處 length 為數(shù)組的長度。如果省略 end ,那么 slice 方法將一直復(fù)制到 arrayObj 的結(jié)尾。如果 end 出現(xiàn)在 start 之前,不復(fù)制任何元素到新數(shù)組中。

這個結(jié)構(gòu)體有三個屬性,1.指向數(shù)組指針,2.len: slice中元素的數(shù)量 3.cap:slice占用內(nèi)存數(shù)量。

只有深刻理解這三個屬性才能在使用slice中不至于犯錯。                           

正確理解變量和共享

多個slice之間可以共享底層的數(shù)據(jù),并且引用的數(shù)組部分區(qū)間可能重疊

以上是golang 圣經(jīng)中的一句話。深刻理解這句話對于日程編程非常有意義。

什么時候共享數(shù)據(jù)會被其他變量修改

func f1()  {
    a1 := []int{1,2,3,4,5,6}
    a2 := a1
    a3 := a1[1:3]
    a1[1] = 999
    
    fmt.Println("a1=",a1,"a2=",a2,"a3=",a3)
}

運行結(jié)果

a1= [1 999 3 4 5 6] a2= [1 999 3 4 5 6] a3= [999 3]
Process finished with exit code 0

我們清楚的看到了數(shù)據(jù)共享,此時修改了a1 ,兩位兩個變量都被修改

什么時候不會修改

func f2()  {
    a1 := []int{1,2,3,4,5,6}
    a2 := a1
    a3 := a1[1:3]
    a2 = append(a2,888)
    a1[1] = 999
    fmt.Println("a1=",a1,"a2=",a2,"a3=",a3)
}

運行結(jié)果

a1= [1 999 3 4 5 6] a2= [1 2 3 4 5 6 888] a3= [999 3]
Process finished with exit code 0

可以雖然a1被修改,a2并沒有修改。我們知道append函數(shù)會面臨內(nèi)存的重新分配。所以等a2進行append的時候,會重新申請內(nèi)存空間,將原有數(shù)組拷貝然后增加如新值。也就是當(dāng)append操作的時候,此時a2 不在和a1 共享內(nèi)存了。

在對slice復(fù)制的時候,如果面臨多個變量同時指向一個數(shù)組的時候,一定要考慮到數(shù)據(jù)的共享和內(nèi)存的重新分配。

以上就是golang slice如何拷貝的詳細(xì)內(nèi)容,更多請關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!


網(wǎng)站欄目:怎么拷貝golang的slice-創(chuàng)新互聯(lián)
本文網(wǎng)址:http://fisionsoft.com.cn/article/dgisod.html