亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么拷貝golang的slice

發布時間:2020-06-16 15:20:01 來源:億速云 閱讀:186 作者:元一 欄目:編程語言

slice理解

golang 的slice是一個指向底層的數組的指針結構體。

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

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

這個結構體有三個屬性,1.指向數組指針,2.len: slice中元素的數量 3.cap:slice占用內存數量。

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

正確理解變量和共享

多個slice之間可以共享底層的數據,并且引用的數組部分區間可能重疊

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

什么時候共享數據會被其他變量修改

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)
}

運行結果

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

我們清楚的看到了數據共享,此時修改了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)
}

運行結果

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函數會面臨內存的重新分配。所以等a2進行append的時候,會重新申請內存空間,將原有數組拷貝然后增加如新值。也就是當append操作的時候,此時a2 不在和a1 共享內存了。

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

以上就是golang slice如何拷貝的詳細內容,更多請關注億速云其它相關文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新巴尔虎右旗| 长海县| 中超| 德昌县| 通渭县| 霍城县| 神木县| 丰都县| 乌海市| 城固县| 奉新县| 高雄县| 梁山县| 石屏县| 兰西县| 南阳市| 渝北区| 凤山市| 密山市| 凌源市| 宿州市| 曲阜市| 吐鲁番市| 西青区| 霍林郭勒市| 江北区| 泗水县| 贡嘎县| 邓州市| 介休市| 会宁县| 安岳县| 宁海县| 吴堡县| 安徽省| 津南区| 古丈县| 张北县| 中方县| 皮山县| 河曲县|