如何浏览struct
中的所有字段并动态编辑/验证它们?
示例:
func UrlEncodeStruct(s interface{}) {
r := reflect.ValueOf(obj)
for i := 0; i < r.NumField(); i++ {
value := r.Field(i).String()
value = url.QueryEscape(value)
r.Field(i).SetString(value)
}
}
答案 0 :(得分:3)
要修改调用者中的struct值,请更改函数以获取指向struct值的指针。否则,对于仅包含导出的字符串字段的结构,已发布的函数是正确的。
func UrlEncodeStruct(s interface{}) {
r := reflect.ValueOf(s).Elem() // <-- note call to Elem() here
for i := 0; i < r.NumField(); i++ {
value := r.Field(i).String()
value = url.QueryEscape(value)
r.Field(i).SetString(value)
}
}
这样称呼:
var s someStructType
UrlEncodeStruct(&s)