gpt4 book ai didi

go - Golang反射MethodByName()

转载 作者:行者123 更新时间:2023-12-01 22:14:57 25 4
gpt4 key购买 nike

我写的代码根据其类型填充数据结构。我需要调用嵌套的struct函数(如果存在)。

为什么我在字段正确的情况下得到零值寻找函数?

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


}

最佳答案

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

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

Run it on the playground

关于go - Golang反射MethodByName(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61047253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com