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

Golang實現(xiàn)深拷貝reflect原理示例探究

 更新時間:2024年01月24日 10:43:47   作者:紹納?nullbody筆記  
這篇文章主要為大家介紹了Golang實現(xiàn)reflect深拷貝原理示例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

Golang reflect深拷貝

作為CRUD成員,是不是平時reflect使用的很少,一旦使用又不知道如何操作,通過學(xué)習(xí)本項目,加深對reflect理解。代碼就是100行

通過本項目可以學(xué)到什么?

reflect各種基本使用

加深對各種數(shù)據(jù)類型的理解

理解的重點:

reflect.ValueOf()

表示將interface{}轉(zhuǎn)成 reflect.Value結(jié)構(gòu)體,這兩個是等價的關(guān)系,reflect.Value的底層就是基于 interface{}。我們知道接口類型包含兩個:動態(tài)類型和動態(tài)值,通過reflect.Value可以方便的獲取這兩個值。

reflect.New(origianl.Type()).Elem()

表示基于類型,new了一個該類型的指針,同時通過解引用Elem()該指針,得到該類型的對象。通過下圖對比理解:

以這段代碼作為理解范例

代碼解析

copyRecursive 函數(shù)定義:將src的值,賦值給dest

  • src為指針類型,dest也是指針類型;我們可以直接 dest.Set(src),這個的含義就是將src的值賦值給dest,達(dá)到目的。但是一個指針a賦值給指針b,此時a和b指向的是同一個對象,并沒有達(dá)到深拷貝的目的?!舅圆恍小?/p>

  • 所以我們需要新建一個對象,讓dest指針指向這個新對象,即可。那這個新對象的類型是什么?不就是 src指針指向的對象的類型嘛。。original := src.Elem()就獲取到src指針指向的對象,類型那就是 original.Type().

  • 所以新建的對象指針為 destValue := reflect.New(original.Type()),這個是不是很類似于C語言中的 int *p = new(int)

  • 接下來,那就是讓dest指向這個新指針即可 dest.Set(destValue)就是賦值的意思

  • 雖然我們new了新對象,并且指向了該對象,但是該新對象的值其實都是初始值的 0值。所以需要繼續(xù)調(diào)用copyRecursive函數(shù),將original對象的值,復(fù)制給 destValue.Elem()對象

項目托管地址:https://github.com/gofish2020/deepCopy

以上就是Golang實現(xiàn)深拷貝原理示例探究的詳細(xì)內(nèi)容,更多關(guān)于Golang 深拷貝的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Go語言實現(xiàn)MapReduce的示例代碼

    Go語言實現(xiàn)MapReduce的示例代碼

    MapReduce是一種備受歡迎的編程模型,它最初由Google開發(fā),用于并行處理大規(guī)模數(shù)據(jù)以提取有價值的信息,本文將使用GO語言實現(xiàn)一個簡單的MapReduce,需要的可以參考下
    2023-10-10
  • golang?metrics各個指標(biāo)含義講解說明

    golang?metrics各個指標(biāo)含義講解說明

    這篇文章主要為大家介紹了golang?metrics各個指標(biāo)含義講解說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Go errors默認(rèn)加堆棧信息的作用分析

    Go errors默認(rèn)加堆棧信息的作用分析

    這篇文章主要為大家介紹了Go errors默認(rèn)加堆棧信息作用分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 淺談golang類型斷言,失敗類型斷言返回值問題

    淺談golang類型斷言,失敗類型斷言返回值問題

    這篇文章主要介紹了淺談golang類型斷言,失敗類型斷言返回值問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 深入理解gorm如何和數(shù)據(jù)庫建立連接

    深入理解gorm如何和數(shù)據(jù)庫建立連接

    這篇文章主要為大家詳細(xì)介紹了gorm如何和數(shù)據(jù)庫建立連接,文中的示例代碼講解詳細(xì),對我們深入了解GO語言有一定的幫助,需要的小伙伴可以參考下
    2023-11-11
  • Golang測試func?TestXX(t?*testing.T)的使用詳解

    Golang測試func?TestXX(t?*testing.T)的使用詳解

    一般Golang中的測試代碼都以xxx_test.go的樣式,在命名測試函數(shù)的時候以Testxx開頭,下面給大家介紹Golang測試func?TestXX(t?*testing.T)的使用,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • Golang操作DuckDB實戰(zhàn)案例分享

    Golang操作DuckDB實戰(zhàn)案例分享

    DuckDB是一個嵌入式SQL數(shù)據(jù)庫引擎,它與眾所周知的SQLite非常相似,但它是為olap風(fēng)格的工作負(fù)載設(shè)計的,DuckDB支持各種數(shù)據(jù)類型和SQL特性,憑借其在以內(nèi)存為中心的環(huán)境中處理高速分析的能力,它迅速受到數(shù)據(jù)科學(xué)家和分析師的歡迎,在這篇博文中,我們將探索在Go中使用DuckDB
    2025-01-01
  • Golang?Configor配置文件工具的使用詳解

    Golang?Configor配置文件工具的使用詳解

    Configor是一個支持?yaml、json、toml、shell?的配置文件工具,這篇文中主要為大家詳細(xì)介紹了Configor的具體使用,感興趣的小伙伴可以學(xué)習(xí)一下
    2023-08-08
  • go語言里面實現(xiàn)并發(fā)安全扣減庫存的幾種方式小結(jié)

    go語言里面實現(xiàn)并發(fā)安全扣減庫存的幾種方式小結(jié)

    本文介紹了GORM框架中的幾種高級查詢技巧,包括隨機返回數(shù)據(jù)的方法,鎖機制的使用,Upsert操作,在gorm-gen中使用原生SQL查詢這幾種方法,具有一定的參考價值,感興趣的可以了解一下
    2026-04-04
  • golang中tar壓縮和解壓文件詳情

    golang中tar壓縮和解壓文件詳情

    這篇文章主要給大家介紹golang中tar壓縮和解壓文件,文章以查看官方文檔自帶的給大家演習(xí)一下golang的archive/tar壓縮和解壓功能,需要的朋友可以參考一下
    2021-11-11

最新評論

宝兴县| 宜兰县| 老河口市| 太仓市| 南靖县| 恩施市| 南丰县| 九台市| 营口市| 孝昌县| 望谟县| 扎兰屯市| 定结县| 汉沽区| 利津县| 蒙阴县| 香河县| 本溪市| 平顺县| 五原县| 沿河| 玉龙| 宜川县| 双桥区| 淮北市| 嫩江县| 晋州市| 那曲县| 贵州省| 惠州市| 康平县| 潢川县| 舟山市| 藁城市| 新昌县| 宜州市| 通渭县| 尚志市| 确山县| 枣阳市| 卢龙县|