动态遍历结构中的每个字段并更改它们

标签 go struct

如何遍历 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)

playground example

关于动态遍历结构中的每个字段并更改它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50863451/

相关文章:

c++ - 在另一个结构中释放一个结构内的指针

c++ - 如何在重载运算符中引用当前结构?

c++ - 我可以从结构指针得到什么?

windows - 调用 GetExtendedTcpTable () 时出现空响应

go - 如何让 goroutines 使用匿名函数在循环中返回值

go - 在 Go 包中持久设置 CGO_CFLAGS?

C 数组在结构末尾初始化

go - 在一个案例中有多个选项,然后在案例中进行一个循环

go - 在golang中动态解码yaml

c++ - 定义结构时是否可以强制字符串为特定大小?