我有一个类型的结构type test struct { fname string time time.Time}我想将字段“time”的值设置为时间。Now() 仅使用反射包。我正在创建一个类似于这样的函数:func setRequestParam(arg interface{}, param string, value interface{}) { v := reflect.ValueOf(arg).Elem() f := v.FieldByName(param) if f.IsValid() { if f.CanSet() { if f.Kind() == reflect.String { f.SetString(value.(string)) return } else if f.Kind() == reflect.Struct { f.Set(reflect.ValueOf(value)) } } }}我试图修复的是这个表达式,我在这里得到一个错误。f.Set(reflect.ValueOf(value))
1 回答
波斯汪
TA贡献1811条经验 获得超4个赞
您必须导出结构字段,否则只有声明包才能访问它们。
type test struct {
Fname string
Time time.Time
}
通过此更改,您的函数将正常工作。setRequestParam()
测试它:
t := test{}
setRequestParam(&t, "Fname", "foo")
setRequestParam(&t, "Time", time.Now())
fmt.Printf("%+v\n", t)
输出(在Go Playground上尝试):
{Fname:foo Time:2009-11-10 23:00:00 +0000 UTC m=+0.000000001}
- 1 回答
- 0 关注
- 55 浏览
添加回答
举报
0/150
提交
取消