首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Go中使用reflect获取地图界面的值?

如何在Go中使用reflect获取地图界面的值?
EN

Stack Overflow用户
提问于 2018-07-04 02:43:42
回答 1查看 9.7K关注 0票数 8

我正在努力获取Go中接口映射的值。

代码语言:javascript
复制
val := reflect.ValueOf(Schema)
fmt.Println("VALUE = ", val)
fmt.Println("KIND = ", val.Kind())
if val.Kind() == reflect.Map {
    fmt.Println("len = ", val.Len())
    for key, element := range val.MapKeys() {
        fmt.Println(key, element) // how to get the value?
    }
}

这将输出以下内容:

代码语言:javascript
复制
VALUE =  map[testString:foobar testInt:1 testBoolean:true testNumber:1 testDateTime:2017-10-06 08:15:30 +0100 +0100]
KIND =  map
len =  5
0 testString
1 testInt
2 testBoolean
3 testNumber
4 testDateTime

我的问题

如何获取地图项目的类型和值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-04 03:19:26

您已经很接近了,您可以使用从MapKeys返回的键,然后使用MapIndex来获取映射键的值。下面,我使用switch语句将接口的值转换为正确的类型。

代码语言:javascript
复制
package main

import (
    "fmt"
    "reflect"
)

func main() {
    Schema := map[string]interface{}{}
    Schema["int"] = 10
    Schema["string"] = "this is a string"
    Schema["bool"] = false

    val := reflect.ValueOf(Schema)
    fmt.Println("VALUE = ", val)
    fmt.Println("KIND = ", val.Kind())

    if val.Kind() == reflect.Map {
        for _, e := range val.MapKeys() {
            v := val.MapIndex(e)
            switch t := v.Interface().(type) {
            case int:
                fmt.Println(e, t)
            case string:
                fmt.Println(e, t)
            case bool:
                fmt.Println(e, t)
            default:
                fmt.Println("not found")

            }
        }
    }
}

程序输出:

代码语言:javascript
复制
VALUE =  map[int:10 string:this is a string bool:false]
KIND =  map
int 10
string this is a string
bool false
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51161150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档