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

go
18,500

Have a look at the reflect package. Here is a working sample for you to 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")
        }
    }
}
Share:
18,500

Related videos on Youtube

Max
Author by

Max

Ancient developer.

Updated on September 14, 2022

Comments

  • Max
    Max about 1 year

    I have a function that is passed a map, each element of which needs to be handled differently depending on whether it is a primitive or a slice. The type of the slice is not known ahead of time. How can I determine which elements are slices (or arrays) and which are not?