最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang copy函數(shù)使用的坑

 更新時間:2023年04月03日 15:11:57   作者:Robin92  
本文主要介紹了golang copy函數(shù)使用的坑,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

之前用 copy 不多,本以為它是個很方便的函數(shù),沒想到在做練習(xí)題時竟還是被它坑了。是我對他期望太多了。

func copy(dst, src []Type) int

基本認(rèn)識:

  • 它只能用于切片,不能用于 map 等任何其他類型
  • 它返回結(jié)果為一個 int 型值,表示 copy 的長度

坑位一:切片 dst 需要先初始化長度

不是你定義好類型,就能將 src 完全 copy 到 dst 的,你需要初始化長度。

  • 如果 dst 長度小于 src 的長度,則 copy 部分;
  • 如果大于,則全部拷貝過來,只是沒占滿 dst 的坑位而已;
  • 相等時剛好不多不少 copy 過來。

坑位二:源切片中元素類型為引用類型時,拷貝的是引用

由于只 copy 切片中的元素,所以如果切片元素的類型是引用類型,那么 copy 的也將是個引用。

如下面例子,matA 和 matB 地址不一樣,但 matA[0] 和 matB[0] 的地址是一樣的。

func wrongCopyMatrix() {
    matA := [][]int{
        {0, 1, 1, 0},
        {0, 1, 1, 1},
        {1, 1, 1, 0},
    }
    matB := make([][]int, len(matA))
    copy(matB, matA)
    fmt.Printf("%p, %p\n", matA, matA[0]) // 0xc0000c0000, 0xc0000c2000
    fmt.Printf("%p, %p\n", matB, matB[0]) // 0xc0000c0050, 0xc0000c2000
}

如果想 copy 多維切片中的每一個切片類型的元素,那么你需要將每個切片元素進(jìn)行 初始化 并 拷貝。注意是兩步:先 初始化,再 拷貝。

正確的拷貝一個多維數(shù)組:

func rightCopyMatrix() {
    matA := [][]int{
        {0, 1, 1, 0},
        {0, 1, 1, 1},
        {1, 1, 1, 0},
    }
    matB := make([][]int, len(matA))
    for i := range matA {
        matB[i] = make([]int, len(matA[i])) // 注意初始化長度
        copy(matB[i], matA[i])
    }
    fmt.Printf("%p, %p\n", matA, matA[0]) // 0xc00005c050, 0xc000018560
    fmt.Printf("%p, %p\n", matB, matB[0]) // 0xc00005c0a0, 0xc0000185c0
}

到此這篇關(guān)于golang copy函數(shù)使用的坑的文章就介紹到這了,更多相關(guān)golang copy函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mac OS系統(tǒng)安裝golang教程

    Mac OS系統(tǒng)安裝golang教程

    這篇文章主要介紹了Mac OS系統(tǒng)安裝golang教程,本文還同時介紹了Sublime Text開發(fā)工具的配置,需要的朋友可以參考下
    2015-01-01
  • 教你用go語言實現(xiàn)比特幣交易功能(Transaction)

    教你用go語言實現(xiàn)比特幣交易功能(Transaction)

    每一筆比特幣交易都會創(chuàng)造輸出,輸出都會被區(qū)塊鏈記錄下來。給某個人發(fā)送比特幣,實際上意味著創(chuàng)造新的 UTXO 并注冊到那個人的地址,可以為他所用,今天通過本文給大家分享go語言實現(xiàn)比特幣交易功能,一起看看吧
    2021-05-05
  • Golang環(huán)境搭建及打包和工具鏈詳解

    Golang環(huán)境搭建及打包和工具鏈詳解

    這篇文章主要介紹了Golang環(huán)境搭建及打包和工具鏈,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • Go設(shè)計模式之訪問者模式講解和代碼示例

    Go設(shè)計模式之訪問者模式講解和代碼示例

    訪問者是一種行為設(shè)計模式, 允許你在不修改已有代碼的情況下向已有類層次結(jié)構(gòu)中增加新的行為,本文將通過代碼示例給大家詳細(xì)的介紹一下Go設(shè)計模式之訪問者模式,需要的朋友可以參考下
    2023-08-08
  • Go設(shè)計模式之狀態(tài)模式講解和代碼示例

    Go設(shè)計模式之狀態(tài)模式講解和代碼示例

    狀態(tài)是一種行為設(shè)計模式,?讓你能在一個對象的內(nèi)部狀態(tài)變化時改變其行為,該模式將與狀態(tài)相關(guān)的行為抽取到獨立的狀態(tài)類中,?讓原對象將工作委派給這些類的實例,?而不是自行進(jìn)行處理,本文將通過代碼示例給大家簡單的介紹一下Go狀態(tài)模式
    2023-08-08
  • golang實現(xiàn)大文件讀取的代碼示例

    golang實現(xiàn)大文件讀取的代碼示例

    在實際工作,我們需要讀取大數(shù)據(jù)文件,文件可能上G百G,所以我們不可能一次性的讀取到內(nèi)存,接下來本文給大家介紹了golang實現(xiàn)大文件讀取的示例,需要的朋友可以參考下
    2024-04-04
  • 淺析Golang中的協(xié)程(goroutine)

    淺析Golang中的協(xié)程(goroutine)

    在Go語言中,協(xié)程(goroutine)是輕量級的線程,它是Go語言中實現(xiàn)并發(fā)編程的基礎(chǔ),Go語言中的協(xié)程是由Go運(yùn)行時調(diào)度器(scheduler)進(jìn)行管理和調(diào)度的,本文將給大家簡單的介紹一下Golang中的協(xié)程,需要的朋友可以參考下
    2023-05-05
  • Golang實現(xiàn)優(yōu)雅的將struct轉(zhuǎn)換為map

    Golang實現(xiàn)優(yōu)雅的將struct轉(zhuǎn)換為map

    在項目實踐中,有時候我們需要將struct結(jié)構(gòu)體轉(zhuǎn)為map映射表,然后基于map做數(shù)據(jù)裁剪或操作。那么下面我來介紹下常用的兩種轉(zhuǎn)換方式,希望對大家有所幫助
    2023-01-01
  • Go實現(xiàn)快速生成固定長度的隨機(jī)字符串

    Go實現(xiàn)快速生成固定長度的隨機(jī)字符串

    這篇文章主要為大家詳細(xì)介紹了怎樣在Go中簡單快速地生成固定長度的隨機(jī)字符串,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的可以學(xué)習(xí)一下
    2022-10-10
  • Golang搭建HTTP服務(wù)器

    Golang搭建HTTP服務(wù)器

    Golang是一種非常流行的編程語言,它的開發(fā)速度快,代碼運(yùn)行效率高等特點非常適合做Web應(yīng)用的開發(fā)。本文將介紹如何使用Golang搭建HTTP服務(wù)器,需要的朋友可以參考閱讀
    2023-04-04

最新評論

澄迈县| 洛隆县| 玛纳斯县| 个旧市| 卫辉市| 三门峡市| 蓬莱市| 乐山市| 西乌珠穆沁旗| 湖口县| 信丰县| 大新县| 海淀区| 营口市| 乐昌市| 贵州省| 香港| 孟州市| 汤阴县| 宜都市| 横山县| 临潭县| 星座| 桐城市| 本溪市| 卢龙县| 光泽县| 南乐县| 南和县| 会东县| 红安县| 根河市| 昌黎县| 恩施市| 通辽市| 那曲县| 神木县| 滕州市| 叶城县| 岗巴县| 黑山县|