我編寫的代碼根據(jù)其類型填充數(shù)據(jù)結(jié)構(gòu)。如果存在,我需要調(diào)用嵌套結(jié)構(gòu)函數(shù)。為什么當(dāng)字段正確時我在尋找函數(shù)時得到零值?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貢獻(xiàn)1893條經(jīng)驗 獲得超10個贊
該方法在指針接收器上。值為fVal
a NestedType
。調(diào)用Value.Addr以獲得*NestedType
:
f := fVal.Addr().MethodByName("FillData")
- 1 回答
- 0 關(guān)注
- 249 瀏覽
添加回答
舉報
0/150
提交
取消