1 回答

TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊
不,這是不可能的,因?yàn)槿绻@樣做,接收器的類(lèi)型方法集將在運(yùn)行時(shí)更改。您可能知道,Go 在其當(dāng)前實(shí)現(xiàn)中是在編譯時(shí)進(jìn)行類(lèi)型檢查的。如果類(lèi)型在運(yùn)行時(shí)突然獲?。ɑ騺G失)方法,您將需要對(duì)每個(gè)接受接口參數(shù)的函數(shù)調(diào)用進(jìn)行運(yùn)行時(shí)接口實(shí)現(xiàn)檢查。
一種在運(yùn)行時(shí)創(chuàng)建方法(帶有接收器的函數(shù))的方法
但是,從技術(shù)上講,您可以通過(guò)分叉反射包來(lái)構(gòu)建一個(gè)表示附加到任意類(lèi)型的方法的值。然而,這不會(huì)改變所述類(lèi)型的方法集,因?yàn)樗举|(zhì)上是對(duì) Go 類(lèi)型系統(tǒng)的一種黑客攻擊。
如何交換對(duì)象上的方法指針?
Go 不像 Java 那樣在具體值中嵌入虛擬方法調(diào)度表,只在接口值中嵌入。如果你愿意讓你的手臟,你可以得到的保持reflect.nonEmptyInterface
并修改其itable(ITAB場(chǎng))。
- 1 回答
- 0 關(guān)注
- 201 瀏覽
添加回答
舉報(bào)