亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Golang:獲取切片的類型

Golang:獲取切片的類型

Go
慕村9548890 2021-06-28 14:06:20
我正在使用反射包來獲取任意數組的類型,但是得到   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它不是一個數組,而是一個整數切片


查看完整回答
反對 回復 2021-07-05
?
猛跑小豬

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()在運行時傳遞非切片值并引起恐慌。


查看完整回答
反對 回復 2021-07-05
  • 2 回答
  • 0 關注
  • 380 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號