如何在不知道键/值类型的情况下测试接口{}是否为地图?

时间:2013-06-10 10:06:18

标签: go

虽然可以测试interface{}是否是已知键/值类型的映射:

func TypeTest(thing interface{}) {
    switch thing.(type) {
    case map[string]string:
        fmt.Println("map string string")
    case map[string]interface{}:
        fmt.Println("map string")
    case map[interface{}]interface{}:
        fmt.Println("map")
    case interface{}:
        fmt.Println("interface")
    default:
        fmt.Println("unknown")
    }
}
TypeTest(map[string]string{"a": "1"}) // "map string string"
TypeTest(map[string]int{"a": 1}) // "interface" !!!

但是,如果我只是想知道interface{}是否是地图,而不担心其键/值类型会怎么样?

1 个答案:

答案 0 :(得分:9)

您可以使用reflect包。

package main

import "fmt"
import "reflect"

func main() {
    m := make(map[string]int)

    fmt.Printf("%v\n", isMap(m))
}

func isMap(m interface{}) bool {
    rt := reflect.TypeOf(m)
    return rt.Kind() == reflect.Map
}