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

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

給定方法值,獲取接收者對象

給定方法值,獲取接收者對象

Go
慕斯王 2023-08-07 14:46:31
Go 有沒有辦法從方法值獲取接收者對象?例如,是否有任何這樣的東西MagicFunc可以使以下程序my info從底層 Foo 實例輸出字符串。package mainimport "fmt"type Foo struct {    A string}func (foo *Foo) Bar() string {    return "bar"}func MyFunc(val interface{}) {    i := MagicFunc(val)    f := i.(Foo)    fmt.Println(f.A)}func main() {    f := Foo{A: "my info"}    MyFunc(f.Bar)}
查看完整描述

2 回答

?
九州編程

TA貢獻1785條經驗 獲得超4個贊

不,不可能獲取該方法的接收器實例。

如果您使用方法表達式而不是方法值,您最多可以獲得接收者的類型,但這不會幫助您獲取字符串my info。


查看完整回答
反對 回復 2023-08-07
?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

我想深入研究一下,很快就找到了這個文檔:https ://golang.org/s/go11func

正如那里所描述的,whenMyFunc輸入val不包含對 f.Bar 的引用,而是對具有簽名的特殊函數的引用func() string。該函數知道它可以通過檢查眾所周知的寄存器來檢索原始 f 指針R0(在示例中。在 amd64 上它似乎是dx,但這顯然是一個實現細節)。

因此,如果不使用特定于實現的匯編代碼就無法做到這一點,這將是非常脆弱的。


查看完整回答
反對 回復 2023-08-07
  • 2 回答
  • 0 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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