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

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

如何使用反射獲取任意方法簽名?

如何使用反射獲取任意方法簽名?

Go
慕尼黑的夜晚無繁華 2023-02-14 16:38:42
我可以用額外的一雙眼睛來解決這個挑戰(zhàn),這里是游樂場最終目標(biāo)是將函數(shù)和結(jié)構(gòu)公共函數(shù)注冊到活動管理器中,并通過函數(shù)名稱執(zhí)行它們,因此類似于:  pool := map[string]interface{       "Sample": func(ctx context.Context) error,       "Sample2": func(ctx context.Context, args ...interface{}) error,       "SampleFromStruct": func(ctx context.Context) error,       "Sample2FromStruct": func(ctx context.Context, args ...interface{}) error,   }功能看起來像:func Sample(ctx context.Context) error {    fmt.Println("exec Sample")    return nil}func Sample2(ctx context.Context, args interface{}) error {    arguments := struct {        Foo string `json:"foo"`        Bar string `json:"bar"`    }{    b, err := json.Marshal(args)    if err != nil {        return err    }    if err := json.Unmarshal(b, &arguments); err != nil {        return err    }    fmt.Println("exec Sample2 with args", arguments)    return nil}// and same but with structtype ActivityInStruct struct {    Bar string}func (a *ActivityInStruct) SampleInStruct(ctx context.Context) error {    fmt.Println("Value of Bar", a.Bar)    return Sample(ctx)}func (a *ActivityInStruct) Sample2InStruct(ctx context.Context, args interface{}) error {    fmt.Println("Value of Bar", a.Bar)    return Sample2(ctx, args)}這么說,我得到了它與以下實現(xiàn)的功能一起使用:type activityManager struct {    fnStorage map[string]interface{}}func (lm *activityManager) Register(fn interface{}) error {    fnName := strings.Split((runtime.FuncForPC(reflect.ValueOf(fn).Pointer()).Name()), ".")    name := fnName[len(fnName)-1]    lm.fnStorage[name] = fn    return nil}
查看完整描述

1 回答

?
一只名叫tom的貓

TA貢獻(xiàn)1906條經(jīng)驗 獲得超3個贊

調(diào)用Value.Method以獲取方法值。

func (lm *activityManager) RegisterStruct(fn interface{}) error {

    v := reflect.ValueOf(fn)

    t := v.Type()

    for i := 0; i < t.NumMethod(); i++ {

        m := t.Method(i)

        if m.IsExported() {

            lm.fnStorage[m.Name] = v.Method(i).Interface()

        }

    }

    return nil

}


查看完整回答
反對 回復(fù) 2023-02-14
  • 1 回答
  • 0 關(guān)注
  • 108 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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