第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

無(wú)論接收方類(lèi)型如何,接口{}上的動(dòng)態(tài)調(diào)用方法

無(wú)論接收方類(lèi)型如何,接口{}上的動(dòng)態(tài)調(diào)用方法

Go
暮色呼如 2021-05-04 12:12:28
我正在使用Go編寫(xiě)的模板系統(tǒng),這意味著它需要自由使用該reflect軟件包。在這種特定情況下,我需要能夠在上動(dòng)態(tài)調(diào)用方法interface{}。奇怪的是,只要我的數(shù)據(jù)是已知類(lèi)型,我的反射邏輯就可以正常工作,但如果數(shù)據(jù)是type則不能interface{}。在下面的例子中可以看到,在邏輯main()和Pass()是相同的。唯一的區(qū)別是數(shù)據(jù)是內(nèi)部的已知類(lèi)型還是已知類(lèi)型interface{}播放:http://play.golang.org/p/FTP3wgc0sZpackage mainimport (    "fmt"    "reflect")type Test struct {    Start string}func (t *Test) Finish() string {    return t.Start + "finish"}func Pass(i interface{}) {    _, ok := reflect.TypeOf(&i).MethodByName("Finish")    if ok {        fmt.Println(reflect.ValueOf(&i).MethodByName("Finish").Call([]reflect.Value{})[0])    } else {        fmt.Println("Pass() fail")    }}func main() {    i := Test{Start: "start"}    Pass(i)    _, ok := reflect.TypeOf(&i).MethodByName("Finish")    if ok {        fmt.Println(reflect.ValueOf(&i).MethodByName("Finish").Call([]reflect.Value{})[0])    } else {        fmt.Println("main() fail")    }}執(zhí)行此代碼后,我們得到以下結(jié)果Pass() failstartfinish這意味著我的動(dòng)態(tài)調(diào)用方法的方法可以正常工作,除非在我的對(duì)象當(dāng)前位于的情況下interface{}。相反,如果我不使用指針接收器并通過(guò),i那么它將按預(yù)期工作。播放:http://play.golang.org/p/myM0UXVYzX這使我相信我的問(wèn)題是,&i當(dāng)i()為時(shí),我無(wú)法訪問(wèn)其地址interface{}。我已經(jīng)仔細(xì)檢查了反射包并測(cè)試了諸如reflect.Value.Addr()和這樣的東西,reflect.PtrTo()但是我都無(wú)法按照我需要的方式工作。我的直覺(jué)是,這與interface{}定義為參考對(duì)象這一事實(shí)有關(guān)。
查看完整描述

3 回答

  • 3 回答
  • 0 關(guān)注
  • 220 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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