在Go中,http表单数据(例如来自POST或PUT请求的数据)可以作为表单的映射进行访问map[string][]string。我很难以通用的方式将其转换为结构。例如,我要加载类似的地图:m := map[string][]string { "Age": []string{"20"}, "Name": []string{"John Smith"},}变成像这样的模型:type Person struct { Age int Name string}因此,我试图编写一个带有签名的函数,该函数LoadModel(obj interface{}, m map[string][]string) []error会将表单数据加载到interface {}中,我可以将其类型转换回Person。使用反射,这样我就可以在具有任何字段的任何结构类型上使用它,而不仅是Person,而且可以根据需要将字符串从http数据转换为int,boolean等。在golang中使用此问题的答案,在使用反射时,如何设置struct字段的值?我可以使用反射设置一个人的价值,例如:p := Person{25, "John"}reflect.ValueOf(&p).Elem().Field(1).SetString("Dave")但是然后我必须为我拥有的每种类型的结构复制load函数。当我尝试将其用于接口{}时,它将无法正常工作。pi := (interface{})(p)reflect.ValueOf(&pi).Elem().Field(1).SetString("Dave")// panic: reflect: call of reflect.Value.Field on interface Value一般情况下我该怎么做?甚至更好的是,有没有一种更惯用的Go方式可以完成我想做的事情?
3 回答
- 3 回答
- 0 关注
- 225 浏览
添加回答
举报
0/150
提交
取消