Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check variable type is map in Go language

Tags:

go

map1 := map[string]string{"name":"John","desc":"Golang"}
map2 := map[string]int{"apple":23,"tomato":13}

so,How to check variable type is map in Go language?

like image 480
emitle Avatar asked Dec 24 '13 11:12

emitle


People also ask

Is map a type in Golang?

What map types exist in Go? There's no specific data type in Golang called map ; instead, we use the map keyword to create a map with keys of a certain type, and values of another type (or the same type). In this example, we declare a map that has string s for its keys, and float64 s for its values.

How do you print variable type in Go?

To print a variable's type, you can use the %T verb in the fmt. Printf() function format. It's the simplest and most recommended way of printing type of a variable. Alternatively, you can use the TypeOf() function from the reflection package reflect .


1 Answers

You can use the reflect.ValueOf() function to get the Value of those maps, and then get the Kind from the Value, which has a Map entry (reflect.Map).

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

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

Here's a more specific example that does the comparison with 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)
}

prints:

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

If you want to know the more specific map type, you can use reflect.TypeOf():

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

like image 90
Eve Freeman Avatar answered Oct 13 '22 05:10

Eve Freeman