【发布时间】:2020-08-11 14:26:42
【问题描述】:
我解析了一堆标志,然后我试图将这些值分配给结构中的字段,但我很难将解析的标志值设置到结构中,因为我无法键入断言它或投射它。
这是我拥有的代码的 sn-p。不用太担心IterFields函数,基本上结构中的每个字段都会调用第三个参数...
注意:下面的代码中有 cmets 会突出显示错误。
flag.Parse()
IterFields(st, v, func(field reflect.Value, sf reflect.StructField) {
flag.VisitAll(func(f *flag.Flag) {
if f.Name == strings.ToLower(sf.Name) || f.Name == sf.Tag.Get("short") {
fmt.Printf("%+v, %T\n", f.Value, f.Value)
// PRINTS: true, *flag.boolValue
if v, ok := f.Value.(bool); ok {
fmt.Println("ok")
} else {
fmt.Println("not ok")
}
// ERROR: impossible type assertion: bool does not implement flag.Value (missing Set method)
field.Set(reflect.ValueOf(f.Value))
// PANIC: value of type *flag.boolValue is not assignable to type bool
}
})
})
【问题讨论】:
标签: pointers go command-line-interface reflect