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

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

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

Golang reflect深拷貝

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

通過本項目可以學到什么?

reflect各種基本使用

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

理解的重點:

reflect.ValueOf()

表示將interface{}轉成 reflect.Value結構體,這兩個是等價的關系,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,達到目的。但是一個指針a賦值給指針b,此時a和b指向的是同一個對象,并沒有達到深拷貝的目的。【所以不行】

  • 所以我們需要新建一個對象,讓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對象的值,復制給 destValue.Elem()對象

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

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

相關文章

  • Go語言數(shù)據(jù)結構之插入排序示例詳解

    Go語言數(shù)據(jù)結構之插入排序示例詳解

    這篇文章主要為大家介紹了Go語言數(shù)據(jù)結構之插入排序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 5個可以在Golang中優(yōu)化代碼以提高性能的技巧分享

    5個可以在Golang中優(yōu)化代碼以提高性能的技巧分享

    作為一名軟件工程師,確保你的代碼高效且性能良好是非常重要的。本文主要和大家分享5個可以在Golang中優(yōu)化代碼以提高性能的技巧,希望對大家有所幫助
    2023-03-03
  • Go1.21新增slices包中函數(shù)的用法詳解

    Go1.21新增slices包中函數(shù)的用法詳解

    Go?1.21新增的?slices?包提供了很多和切片相關的函數(shù),可以用于任何類型的切片,本文為大家整理了部分函數(shù)的具體用法,感興趣的小伙伴可以了解一下
    2023-08-08
  • 在Golang中實現(xiàn)RSA算法的加解密操作詳解

    在Golang中實現(xiàn)RSA算法的加解密操作詳解

    RSA 是一種非對稱加密算法,廣泛使用于數(shù)據(jù)的安全傳輸,crypto/rsa 是 Golang 中實現(xiàn)了 RSA 算法的一個標準庫,提供了生成公私鑰對、加解密數(shù)據(jù)、簽名和驗簽等功能,本文給大家介紹了在Golang中實現(xiàn)RSA算法的加解密操作,需要的朋友可以參考下
    2023-12-12
  • golang跳轉語句goto,break,continue的使用及區(qū)別說明

    golang跳轉語句goto,break,continue的使用及區(qū)別說明

    這篇文章主要介紹了golang跳轉語句goto,break,continue的使用及區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • goLand Delve版本太老的問題及解決

    goLand Delve版本太老的問題及解決

    這篇文章主要介紹了goLand Delve版本太老的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • GO實現(xiàn)跳躍表的示例詳解

    GO實現(xiàn)跳躍表的示例詳解

    跳表全稱叫做跳躍表,簡稱跳表,是一個隨機化的數(shù)據(jù)結構,實質就是一種可以進行二分查找的有序鏈表。本文將利用GO語言編寫一個跳表,需要的可以參考一下
    2022-12-12
  • golang實現(xiàn)單點登錄系統(tǒng)(go-sso)

    golang實現(xiàn)單點登錄系統(tǒng)(go-sso)

    這篇文章主要介紹了golang實現(xiàn)單點登錄系統(tǒng)(go-sso),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • go語言實現(xiàn)接口查詢

    go語言實現(xiàn)接口查詢

    這篇文章主要介紹了go語言實現(xiàn)接口查詢,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go實現(xiàn)一個配置包詳解

    Go實現(xiàn)一個配置包詳解

    在現(xiàn)代軟件開發(fā)中,配置文件是不可或缺的一部分。在編寫 Go 項目時,程序的靈活性和可擴展性都需要依賴于配置文件的加載。本文就來探究下在 Go 項目中如何更加方便的加載和管理配置,感興趣的朋友跟著小編一起來學習吧
    2023-04-04

最新評論