Golang: получить тип среза
Я использую пакет reflect для получения типа произвольного массива, но получаю
prog.go:17: cannot use sample_array1 (type []int) as type []interface {} in function argument [process exited with non-zero status]
Как получить тип из массива? Я знаю, как получить его значение.
func GetTypeArray(arr []interface{}) reflect.Type {
return reflect.TypeOf(arr[0])
}
2 ответов
изменения:
GetTypeArray(arr []interface{})
в:
GetTypeArray(arr interface{})
кстати, []int
- это не массив, а slice целых чисел.
тот факт, что вы индексируете срез, небезопасен - если он пуст, вы получите панику во время выполнения индекса вне диапазона. Несмотря на это, это не нужно из-за отразить пакета Elem()
метод:
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
...
}
Итак, вот что вы хотите использовать:
func GetTypeArray(arr interface{}) reflect.Type {
return reflect.TypeOf(arr).Elem()
}
обратите внимание, что в соответствии с изменением @tomwilde, аргумент arr
может быть абсолютно любого типа, так что ничто не мешает вам пройти GetTypeArray()
значение без среза во время выполнения и получение паника.