我正在使用反射包來獲取任意數組的類型,但是得到 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
2 回答

一只甜甜圈
TA貢獻1836條經驗 獲得超5個贊
改變:
GetTypeArray(arr []interface{})
至:
GetTypeArray(arr interface{})
順便說一下,[]int
它不是一個數組,而是一個整數切片。

猛跑小豬
TA貢獻1858條經驗 獲得超8個贊
索引切片的事實是不安全的——如果它是空的,你會得到一個索引超出范圍的運行時恐慌。無論如何,由于反射包的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()在運行時傳遞非切片值并引起恐慌。
- 2 回答
- 0 關注
- 380 瀏覽
添加回答
舉報
0/150
提交
取消