求教,如果反射后的类型是map[string]string类型,要如何才能遍历这个map呢?

oscarzhou · 2017-11-16 03:29:00 · 2839 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2017-11-16 03:29:00 的主题,其中的信息可能已经有所发展或是发生改变。

比如

    func parse(obj interface{}){
        v := reflect.TypeOf(obj) //v是map[string]string

    }

如果我想遍历这个obj,并且取出它的所有的value,需要怎么做呢?


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2839 次点击  
加入收藏 微博
5 回复  |  直到 2017-11-17 00:34:07
tk103331
tk103331 · #1 · 7年之前

先要取到Value对象,然后使用MapKeys、MapIndex方法遍历取值。 大概就是这样

v := reflect.ValueOf(o)
keys := v.MapKeys()
for _,k:=range keys{
    value := v.MapIndex(k)
}

//value就是map中的值

http://docs.studygolang.com/pkg/reflect/#Value.MapIndex

jack_tan
jack_tan · #2 · 7年之前

for range

oscarzhou
oscarzhou · #3 · 7年之前
tk103331tk103331 #1 回复

先要取到Value对象,然后使用MapKeys、MapIndex方法遍历取值。 大概就是这样 ``` v := reflect.ValueOf(o) keys := v.MapKeys() for _,k:=range keys{ value := v.MapIndex(k) } //value就是map中的值 ``` http://docs.studygolang.com/pkg/reflect/#Value.MapIndex

太谢谢你了大神,这个方案太好了,我之前一直没有找到,这个大大的解决了我的问题。

tk103331
tk103331 · #4 · 7年之前
oscarzhouoscarzhou #3 回复

#1楼 @tk103331 太谢谢你了大神,这个方案太好了,我之前一直没有找到,这个大大的解决了我的问题。

不客气。

需要注意的是,拿到的value是reflect.Value类型的对象,需要调用相应的方法获取具体的值,比如

s := value.String()//字符串类型
i := value.Int()//int64类型
b:=value.Bool()//bool类型
……
oscarzhou
oscarzhou · #5 · 7年之前
tk103331tk103331 #4 回复

#3楼 @oscarzhou 不客气。 需要注意的是,拿到的value是reflect.Value类型的对象,需要调用相应的方法获取具体的值,比如 ``` s := value.String()//字符串类型 i := value.Int()//int64类型 b:=value.Bool()//bool类型 …… ```

嗯嗯,刚才看完你的代码就有灵感啦。用value.Kind() 做switch比对了。感谢!!!

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传