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() значение без среза во время выполнения и получение паника.
