dry0106 2015-02-28 04:33
浏览 20
已采纳

如何与反射一起遍历结构

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条回答 默认 最新

  • doulongti5932 2015-02-28 04:54
    关注

    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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line