亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否可以在go中使用接收器(方法)動態創建函數?

是否可以在go中使用接收器(方法)動態創建函數?

Go
森林海 2021-09-13 16:27:38
我正在閱讀reflect.MakeFunc并想知道是否還有一種方法可以在運行時創建方法(帶有接收器的函數)。
查看完整描述

1 回答

?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

不,這是不可能的,因為如果您這樣做,接收器的類型方法集將在運行時更改。您可能知道,Go 在其當前實現中是在編譯時進行類型檢查的。如果類型在運行時突然獲?。ɑ騺G失)方法,您將需要對每個接受接口參數的函數調用進行運行時接口實現檢查。

一種在運行時創建方法(帶有接收器的函數)的方法

但是,從技術上講,您可以通過分叉反射包構建一個表示附加到任意類型的方法的值。然而,這不會改變所述類型的方法集,因為它本質上是對 Go 類型系統的一種黑客攻擊。


如何交換對象上的方法指針?

Go 不像 Java 那樣在具體值中嵌入虛擬方法調度表,只在接口值中嵌入。如果你愿意讓你的手臟,你可以得到的保持reflect.nonEmptyInterface并修改其itable(ITAB場)。


查看完整回答
反對 回復 2021-09-13
  • 1 回答
  • 0 關注
  • 202 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號