1 回答

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊
問題在于該方法位于指針接收器上,但該函數(shù)正在與賦值器接收器一起使用。重寫該函數(shù)以使用指向結(jié)構(gòu)的指針:
func setPropertiesFromFlags(vp reflect.Value, viper *viper.Viper) {
method := vp.MethodByName("Parse")
fmt.Println(method)
v := vp.Elem()
t := v.Type()
for i := 0; i < t.NumField(); i++ {
field := t.Field(i)
switch field.Type.Kind() {
case reflect.Struct:
setPropertiesFromFlags(v.Field(i).Addr(), viper) // <-- take address of field here
case reflect.String:
v.Field(i).SetString(viper.GetString(field.Tag.Get("name")))
}
}
}
像這樣調(diào)用:
setPropertiesFromFlags(reflect.ValueOf(c), viper) // <-- do not call Elem()
- 1 回答
- 0 關(guān)注
- 171 瀏覽
添加回答
舉報(bào)