欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

Golang reflect深拷貝

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

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

reflect各種基本使用

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

理解的重點(diǎn):

reflect.ValueOf()

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

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

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

以這段代碼作為理解范例

代碼解析

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

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

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

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

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

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

項(xiàng)目托管地址:https://github.com/gofish2020/deepCopy

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

相關(guān)文章

  • 解析Golang中的鎖競(jìng)爭(zhēng)問題

    解析Golang中的鎖競(jìng)爭(zhēng)問題

    這篇文章主要介紹了golang中的鎖競(jìng)爭(zhēng)問題,本文通過實(shí)例代碼給大家詳細(xì)講解,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • Go語(yǔ)言結(jié)構(gòu)化日志slog的用法解析

    Go語(yǔ)言結(jié)構(gòu)化日志slog的用法解析

    go?1.21.0?版本引入了一個(gè)新的包?log/slog,該包提供了結(jié)構(gòu)化日志的功能,本文小編就來(lái)和大家聊聊log/slog?包的使用,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • Go語(yǔ)言Select chan用法小結(jié)

    Go語(yǔ)言Select chan用法小結(jié)

    select語(yǔ)句是Go語(yǔ)言中用于處理多個(gè)通道操作的關(guān)鍵字,它允許你在多個(gè)通道上進(jìn)行非阻塞的選擇操作,本文就詳細(xì)介紹一下如何使用,感興趣的可以了解一下
    2023-09-09
  • Go設(shè)計(jì)模式之迭代器模式講解和代碼示例

    Go設(shè)計(jì)模式之迭代器模式講解和代碼示例

    迭代器是一種行為設(shè)計(jì)模式, 讓你能在不暴露復(fù)雜數(shù)據(jù)結(jié)構(gòu)內(nèi)部細(xì)節(jié)的情況下遍歷其中所有的元素,本文將為大家詳細(xì)介紹Go 迭代器模式,文中詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-07-07
  • 詳解go中的defer鏈如何被遍歷執(zhí)行

    詳解go中的defer鏈如何被遍歷執(zhí)行

    為了在退出函數(shù)前執(zhí)行一些資源清理的操作,例如關(guān)閉文件、釋放連接、釋放鎖資源等,會(huì)在函數(shù)里寫上多個(gè)defer語(yǔ)句,多個(gè)_defer 結(jié)構(gòu)體形成一個(gè)鏈表,G 結(jié)構(gòu)體中某個(gè)字段指向此鏈表,那么go中的defer鏈如何被遍歷執(zhí)行,本文將給大家詳細(xì)的介紹,感興趣的朋友可以參考下
    2024-01-01
  • golang調(diào)用c實(shí)現(xiàn)的dll接口細(xì)節(jié)分享

    golang調(diào)用c實(shí)現(xiàn)的dll接口細(xì)節(jié)分享

    這篇文章主要介紹了golang調(diào)用c實(shí)現(xiàn)的dll接口細(xì)節(jié)分享,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2021-05-05
  • Go語(yǔ)言使用HTTP包創(chuàng)建WEB服務(wù)器的方法

    Go語(yǔ)言使用HTTP包創(chuàng)建WEB服務(wù)器的方法

    這篇文章主要介紹了Go語(yǔ)言使用HTTP包創(chuàng)建WEB服務(wù)器的方法,結(jié)合實(shí)例形式分析了Go語(yǔ)言基于HTTP包創(chuàng)建WEB服務(wù)器客戶端與服務(wù)器端的實(shí)現(xiàn)方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-07-07
  • 淺析Go語(yǔ)言的數(shù)據(jù)類型及數(shù)組

    淺析Go語(yǔ)言的數(shù)據(jù)類型及數(shù)組

    Golang是一種靜態(tài)強(qiáng)類型、編譯型語(yǔ)言。Go?語(yǔ)言語(yǔ)法與?C?相近,但功能上有:內(nèi)存安全,GC(垃圾回收),結(jié)構(gòu)形態(tài)及?CSP-style?并發(fā)計(jì)算。本文主要和大家聊聊Go語(yǔ)言的數(shù)據(jù)類型及數(shù)組,希望對(duì)大家有所幫助
    2022-11-11
  • go編譯標(biāo)簽build?tag注釋里語(yǔ)法詳解

    go編譯標(biāo)簽build?tag注釋里語(yǔ)法詳解

    這篇文章主要為大家介紹了go編譯標(biāo)簽build?tag注釋里語(yǔ)法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Golang設(shè)計(jì)模式中抽象工廠模式詳細(xì)講解

    Golang設(shè)計(jì)模式中抽象工廠模式詳細(xì)講解

    抽象工廠模式用于生成產(chǎn)品族的工廠,所生成的對(duì)象是有關(guān)聯(lián)的。如果抽象工廠退化成生成的對(duì)象無(wú)關(guān)聯(lián)則成為工廠函數(shù)模式。比如本例子中使用RDB和XML存儲(chǔ)訂單信息,抽象工廠分別能生成相關(guān)的主訂單信息和訂單詳情信息
    2023-01-01

最新評(píng)論