为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 反射 MethodByName()

Golang 反射 MethodByName()

Go
森林海 2022-05-23 17:39:46
我编写的代码根据其类型填充数据结构。如果存在,我需要调用嵌套结构函数。为什么当字段正确时我在寻找函数时得到零值?type (    SomeData struct {        Val NestedType    }    NestedType struct {        V1 string    })func (t *NestedType) FillData(v int) {    t.V1 = fmt.Sprintf("Here is %v", v)}func main() {    i := SomeData{}    reflect.ValueOf(&i.Val).MethodByName("FillData").Call([]reflect.Value{reflect.ValueOf(555)})    fmt.Println(i) /// {{I hate 555}}    // BUT!    v := 666    newObj := reflect.New(reflect.TypeOf(SomeData{}))    fVal := newObj.Elem().FieldByName("Val")    fmt.Println( "fVal.NumField():", fVal.NumField()) //fVal.NumField(): 1    f := fVal.MethodByName("FillData")    f.Call([]reflect.Value{reflect.ValueOf(v)}) //panic: reflect: call of reflect.Value.Call on zero Value}
查看完整描述

1 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

该方法在指针接收器上。值为fValNestedType。调用Value.Addr以获得*NestedType

    f := fVal.Addr().MethodByName("FillData")

在操场上运行它


查看完整回答
反对 回复 2022-05-23
  • 1 回答
  • 0 关注
  • 265 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号