最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

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

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

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

Go
慕斯王 2023-08-07 14:46:31
Go 有沒有辦法從方法值獲取接收者對象?例如,是否有任何這樣的東西MagicFunc可以使以下程序my info從底層 Foo 實(shí)例輸出字符串。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貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個贊

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

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


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

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個贊

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

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

因此,如果不使用特定于實(shí)現(xiàn)的匯編代碼就無法做到這一點(diǎn),這將是非常脆弱的。


查看完整回答
反對 回復(fù) 2023-08-07
  • 2 回答
  • 0 關(guān)注
  • 150 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號