我正在閱讀reflect.MakeFunc并想知道是否還有一種方法可以在運行時創建方法(帶有接收器的函數)。
1 回答

哆啦的時光機
TA貢獻1779條經驗 獲得超6個贊
不,這是不可能的,因為如果您這樣做,接收器的類型方法集將在運行時更改。您可能知道,Go 在其當前實現中是在編譯時進行類型檢查的。如果類型在運行時突然獲?。ɑ騺G失)方法,您將需要對每個接受接口參數的函數調用進行運行時接口實現檢查。
一種在運行時創建方法(帶有接收器的函數)的方法
但是,從技術上講,您可以通過分叉反射包來構建一個表示附加到任意類型的方法的值。然而,這不會改變所述類型的方法集,因為它本質上是對 Go 類型系統的一種黑客攻擊。
如何交換對象上的方法指針?
Go 不像 Java 那樣在具體值中嵌入虛擬方法調度表,只在接口值中嵌入。如果你愿意讓你的手臟,你可以得到的保持reflect.nonEmptyInterface
并修改其itable(ITAB場)。
- 1 回答
- 0 關注
- 202 瀏覽
添加回答
舉報
0/150
提交
取消