如何遍历 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)
}
}
最佳答案
要修改调用者中的结构值,请更改函数以获取指向结构值的指针。否则,发布的函数对于仅包含导出的字符串字段的结构是正确的。
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)
关于动态遍历结构中的每个字段并更改它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50863451/