2013-12-24 3 views
4
map1 := map[string]string{"name":"John","desc":"Golang"} 
map2 := map[string]int{"apple":23,"tomato":13} 

так, как проверить тип переменной является отображением в Go языке?Как проверить тип переменной является отображением в Go языке

+0

Обратите внимание, что Go имеет статическую типизацию. Если вы объявляете map1 и map2, как и в вашем примере кода, они всегда будут картой. – fuz

ответ

7

Вы можете использовать функцию reflect.ValueOf(), чтобы получить значение этих карт , а затем получить Вид из значения, который имеет запись в карте (reflect.Map).

http://play.golang.org/p/5AUKxECqNA

http://golang.org/pkg/reflect/#Kind

Вот конкретный пример, который делает сравнение с reflect.Map: http://play.golang.org/p/-qr2l_6TDq

package main 

import (
    "fmt" 
    "reflect" 
) 

func main() { 
    map1 := map[string]string{"name": "John", "desc": "Golang"} 
    map2 := map[string]int{"apple": 23, "tomato": 13} 
    slice1 := []int{1,2,3} 
    fmt.Printf("%v is a map? %v\n", map1, reflect.ValueOf(map1).Kind() == reflect.Map) 
    fmt.Printf("%v is a map? %v\n", map2, reflect.ValueOf(map2).Kind() == reflect.Map) 
    fmt.Printf("%v is a map? %v\n", slice1, reflect.ValueOf(slice1).Kind() == reflect.Map) 
} 

печатает:

map[name:John desc:Golang] is a map? true 
map[apple:23 tomato:13] is a map? true 
[1 2 3] is a map? false 

Если вы хотите узнать более конкретный тип карты, вы можете использовать reflect.TypeOf():

http://play.golang.org/p/mhjAAdgrG4

Смежные вопросы