日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

go reflection

發布時間:2023/12/16 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 go reflection 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

refletion 反射

1、首先我們研究一下go反射是什么

Go 語言提供了一種機制在運行時更新變量和檢查它們的值、調用它們的方法,但是在編譯時并不知道這些變量的具體類型,這稱為反射機制。

2、反射能干嘛?

考慮可能有兩種情況

1、參數的入參是空的interface,也就是說參數的入參需要在該函數被執行的時候,才能知道這個入參到底是什么類型。
這種情況產生的原因: 往往是函數定義的時候,希望該入參可以支持很多的數據類型,或者說定義該函數的時候,并沒有想好這個入參應該是什么數據類型。

2、程序在執行到一處代碼的時候,它到底要調用哪一個函數,取決于當前傳遞的數據是什么規則,而不同的規則需要調用不同的函數,這種情況下也需要用到反射。

3、反射的實例

首先go的反射有非常著名的三大法則。

1.Reflection goes from interface value to reflection object.(反射能夠將 interface 中的類型和值轉換成真實的反射對象。)
2.Reflection goes from reflection object to interface value.(反射能夠將真實的反射對象轉變成真實類型。)
3.To modify a reflection object, the value must be settable.(如果像修改反射生成的反射對象,這個數值必須是可修改的。)

反射的實現是以空接口作為基礎的,可以說空的接口是反射實現的基石。空接口類似于C語言中的void*,它可以轉換成任何類型的數值。
當我們使用反射特性時,實際上用到的就是存儲在 interface 變量中的和類型相關的信息

Go中的反射,在使用中最核心的就兩個函數:

reflect.TypeOf(x)
reflect.ValueOf(x)

我們分開每個法則做解釋

法則一
說白了就是接口類型能通過反射的兩個核心對象轉換成反射對象

法則二


就是法則一的逆
從反射對象能夠轉換成接口

法則三

法則三就直譯就可以了

就是通過修改反射對象,能夠修改原接口值。

4、go反射的原理

反射的實現是以空接口作為基礎的,可以說空的接口是反射實現的基石。
當我們使用反射特性時,實際上用到的就是存儲在 interface 變量中的和類型相關的信息,也就是常說的 <type, value>。

總結

以上是生活随笔為你收集整理的go reflection的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。