英文:
How to iterate through a struct in go with reflect
问题
我有一个特定的结构体,其中包含一些URL参数,我想使用反射来遍历结构体字段,构建一个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的标签值
那么我该如何解决这个问题呢?
英文:
I have a specific struct that contains some url parameters, I want to build a url parameters string using reflect to iterate through the struct field, so that I wont care about what's the struct really contains.
Let's say I have a struct like this:
type Student struct {
Name string `paramName: "username"`
Age int `paramName: userage`
}
And I assign a student like this:
s := Student{
Name : "Bob",
Age : 15,
}
I want to build a query parameter string like this for this student instance:
username=Bob&userage=15
So far I have got:
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
}
But s.buildParams()
gets me nothing, not event the tag value of paramName in each field
So How can I do this?
答案1
得分: 1
在结构标签中,冒号和值之间不应该有空格。应该是paramName:"username"
而不是paramName: "username"
。此外,你正在使用字段名称而不是字段值。为了将值转换为字符串,你需要使用稍微复杂一些的方法。这里有一个完整的示例:http://play.golang.org/p/4hEQ4jgDph
英文:
You shouldn't have a space between the colon and the value in the struct tags. paramName:"username"
not paramName: "username"
. Also, you're using the field name instead of the field value. In order to turn the value into a string you'll need something a bit more complex. Here is a complete example: http://play.golang.org/p/4hEQ4jgDph
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论