如何使用反射迭代结构

时间:2015-02-28 04:33:05

标签: reflection struct go

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

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

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的标记值: - (

那我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

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