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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flask 应用程序的工厂函数
- 下一篇: 博弈论与计算机,《黑 | 科技》| 人类