如何在Go中通过反射获取地图界面的值?

I'm struggling to get the value of an interface map in Go.

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?
    }
}

This outputs:

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

My question:
How can I get the type and value of the map items?

You were close, you can use the key returned form MapKeys and then use MapIndex to get the value of the map key. Below I use a switch statement to convert the value of the interface to the correct type.

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")

            }
        }
    }
}

Program Output:

VALUE =  map[int:10 string:this is a string bool:false]
KIND =  map
int 10
string this is a string
bool false