1 回答
TA贡献1744条经验 获得超4个赞
好了,一些挖后,并感谢我的IDE,我发现,使用的方法elem()上ptr谁返回一个指针*time.Duration做的伎俩。如果我直接使用它也有效&ptr.Duration
这是工作代码。
func (d *duration) elem() *time.Duration {
return &d.Duration
}
func assignFlags(v interface{}) {
// Dereference into an adressable value
xv := reflect.ValueOf(v).Elem()
xt := xv.Type()
for i := 0; i < xt.NumField(); i++ {
f := xt.Field(i)
// Get tags for this field
name := f.Tag.Get("long")
short := f.Tag.Get("short")
usage := f.Tag.Get("usage")
addr := xv.Field(i).Addr().Interface()
// Assign field to a flag
switch ptr := addr.(type) {
case *duration:
if len(short) > 0 {
flag.DurationVarP(ptr.elem(), name, short, 0, usage)
} else {
flag.DurationVar(ptr.elem(), name, 0, usage)
}
}
}
}
- 1 回答
- 0 关注
- 145 浏览
添加回答
举报