Golang: get the type of slice

匿名 (未验证) 提交于 2019-12-03 00:50:01

问题:

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

回答1:

Change:

GetTypeArray(arr []interface{}) 

to:

GetTypeArray(arr interface{}) 

By the way, []int is not an array but a slice of integers.



回答2:

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.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!