I am using reflect package to get the type of arbitrary array, but getting
prog.go:17: cannot use sample_array1 (type []int) as type []interface {} in function argument [process exited with non-zero status]
How do I get the type from array? I know how to get it from value.
func GetTypeArray(arr []interface{}) reflect.Type { return reflect.TypeOf(arr[0]) }
http://play.golang.org/p/sNw8aL0a5f
Change:
GetTypeArray(arr []interface{})
to:
GetTypeArray(arr interface{})
By the way, []int
is not an array but a slice of integers.
The fact that you're indexing the slice is unsafe - if it's empty, you'll get an index-out-of-range runtime panic. Regardless, it's unnecessary because of the reflect package's Elem()
method:
type Type interface { ... // Elem returns a type's element type. // It panics if the type's Kind is not Array, Chan, Map, Ptr, or Slice. Elem() Type ... }
So, here's what you want to use:
func GetTypeArray(arr interface{}) reflect.Type { return reflect.TypeOf(arr).Elem() }
Note that, as per @tomwilde's change, the argument arr
can be of absolutely any type, so there's nothing stopping you from passing GetTypeArray()
a non-slice value at runtime and getting a panic.