91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

go切片的copy和view的使用方法

發布時間:2020-09-19 14:07:52 來源:腳本之家 閱讀:208 作者:pureyb 欄目:編程語言

語義理解切片

go 語言中的切片是 go 語言的一個特色,從語義上來說,切片就是把一個整體的東西切分成小的部分,那么對于語言中的切片也是同理。

舉個例子看如下代碼:

package main
import "fmt"
func main() {
 arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7}
 fmt.Println("arr[2:6]:", arr[2:6]) // 從下標2到下標6
 fmt.Println("arr[:6]:", arr[:6]) // 從下標0到下標6
 fmt.Println("arr[2:]:", arr[2:]) // 從下標2到最后
 fmt.Println("arr[:]:", arr[:]) // 全部
}

輸出結果為:

arr[2:6]: [2 3 4 5]
arr[:6]: [0 1 2 3 4 5]
arr[2:]: [2 3 4 5 6 7]
arr[:]: [0 1 2 3 4 5 6 7]

這里可以很明確的看出,我們想要 arr 數組的哪一部分,我們就切哪一部分。

當然,如果僅僅知道切片是這么用的當然還不夠,我們應該更加深入的理解,如:

對原數組的 copy 還是 view 。

對于 go 語言的數組,copy 和 view 是同時都存在的。

  • copy 就是使用這個數組的時候我將這個數組拷貝一份,這樣對于數組的增刪改,是不會改變原數組的值的
  • view 由數組執行切片所返回的對象是一個 view,即視圖,若我們在視圖上操作數組,會改變原數組,

copy 場景

package main

import (
 "fmt"
)

func updateArr(arr [5]int) {
 arr[0] = 100
 fmt.Println("修改后的arr:", arr)
}

func main() {
 arr3 := [...]int{2, 4, 5, 6, 7}
 fmt.Println("原來的:", arr3)
 updateArr(arr3)
 fmt.Println("再次查看原始的:", arr3)
}

輸出結果:

原來的: [2 4 5 6 7]
修改后的arr: [100 4 5 6 7]
再次查看原始的: [2 4 5 6 7]

如上代碼可以看到,我們在 updateArr 里面修改了下標為 0 的值,但是我們輸出原始數組的時候,并沒有變。這就是對數組 copy。

view 場景

func updateArr(arr []int) {
 arr[0] = 100
 fmt.Println("修改后的arr:", arr)
}

func main() {
 arr3 := [...]int{2, 4, 5, 6, 7}
 fmt.Println("原來的:", arr3)
 // 使用切片
 updateArr(arr3[:])
 fmt.Println("再次查看原始的:", arr3)
}

輸出結果:

原來的: [2 4 5 6 7]
修改后的arr: [100 4 5 6 7]
再次查看原始的: [100 4 5 6 7]

為什么 view 能夠改變原數組

雖然 Slice 本身是值類型,但是它內部使用了對數組的指針引用,所以修改切片數據,會將數組原有數據修改掉。

當然,在理解上面的同時,一定要知道 go 是如何定義一個切片的

var b []int

所以,在 updateArr 這個函數傳參的時候 arr []int 是傳切片進去。不然會報錯。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

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

AI

新安县| 望都县| 扶绥县| 张掖市| 临漳县| 金塔县| 婺源县| 建瓯市| 皮山县| 当阳市| 历史| 孟州市| 敦煌市| 稷山县| 罗田县| 道孚县| 嘉黎县| 城步| 花莲市| 晋江市| 永城市| 通许县| 清远市| 登封市| 崇礼县| 雅安市| 五河县| 梨树县| 高陵县| 廉江市| 新巴尔虎右旗| 长治县| 信阳市| 本溪| 临海市| 纳雍县| 将乐县| 水富县| 青田县| 合江县| 南涧|