我在递归反射函数中调用方法时遇到麻烦。在这里:
func setPropertiesFromflags(v reflect.Value,viper *viper.Viper) {
t := v.Type()
method := v.MethodByName("Parse")
fmt.Println(method)
for i := 0; i < t.NumField(); i++ {
field := t.Field(i)
switch field.Type.Kind() {
case reflect.Struct:
setPropertiesFromflags(v.Field(i),viper)
case reflect.String:
v.Field(i).SetString(viper.GetString(field.Tag.Get("name")))
}
}
我使用以下函数调用函数
:// Config struct passed to all services
type Config struct {
common.Config
common.ServerConfig
common.AuthConfig
}
// Parse the thing already!
func (c *Config) Parse() {
fmt.Println("RUN THIS THING")
}
int main() {
setPropertiesFromflags(reflect.ValueOf(c).Elem(),viper)
}
我希望的是将我的parse方法放到我正在打印方法的地方,然后对它运行.Call()。相反,它正在打印出:<invalid reflect.Value>
,我无法反对。
我想我无法将每个方法的返回值都放在头上。我知道我必须使用ValueOf来提取值,但是似乎我尝试从反射类本身获取方法的任何排列:-p sigh