猿问

Golang:获取切片的类型

我正在使用反射包来获取任意数组的类型,但是得到


   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])

  }

http://play.golang.org/p/sNw8aL0a5f


慕村9548890
浏览 344回答 2
2回答

一只甜甜圈

改变:GetTypeArray(arr []interface{})至:GetTypeArray(arr interface{})顺便说一下,[]int它不是一个数组,而是一个整数切片。

猛跑小猪

索引切片的事实是不安全的——如果它是空的,你会得到一个索引超出范围的运行时恐慌。无论如何,由于反射包的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()在运行时传递非切片值并引起恐慌。
随时随地看视频慕课网APP

相关分类

Go
我要回答