我有一个包含一些url参数的特定结构,我想使用reflect来遍历struct字段来构建一个url参数字符串,这样我就不会在意该结构真正包含了什么。

假设我有一个这样的结构:

type Student struct {
   Name string `paramName: "username"`
   Age int `paramName: userage`
}

我分配一个这样的学生:
s := Student{
  Name : "Bob",
  Age : 15,
}

我想为此学生实例构建这样的查询参数字符串:
username=Bob&userage=15

到目前为止,我已经:
func (s Student) buildParams() string {
    st := reflect.TypeOf(s)
    fieldCount := st.NumField()
    params := ""
    for i := fieldCount; i > 0 ; i-- {
      params = params +  "&" + st.Field(i).Tag.Get("paramName") + "=" + st.Field(i).Name
    }
    return params
}

但是s.buildParams()什么也没给我带来什么,不是每个字段中paramName的标记值都::(

那么我该怎么做呢?

最佳答案

冒号和struct标记中的值之间不应有空格。 paramName:"username"不是paramName: "username"。另外,您正在使用字段名称而不是字段值。为了将值转换成字符串,您将需要一些更复杂的东西。这是一个完整的示例:http://play.golang.org/p/4hEQ4jgDph

10-07 23:32