How do you determine if a variable is a slice or an array?

I have a function to which a map is passed, each element of which needs to be processed differently depending on whether it is primitive or slice. The type of cut is not known in advance. How to determine which elements are slices (or arrays) and which are not?

+7
go
source share
1 answer

Look at the reflect package. Here is a working example that you can play with.

 package main import "fmt" import "reflect" func main() { m := make(map[string]interface{}) m["a"] = []string{"a", "b", "c"} m["b"] = [4]int{1, 2, 3, 4} test(m) } func test(m map[string]interface{}) { for k, v := range m { rt := reflect.TypeOf(v) switch rt.Kind() { case reflect.Slice: fmt.Println(k, "is a slice with element type", rt.Elem()) case reflect.Array: fmt.Println(k, "is an array with element type", rt.Elem()) default: fmt.Println(k, "is something else entirely") } } } 
+12
source share

All Articles