首頁 > 後端開發 > Golang > 如何對 Go `reflect.TypeOf()` 結果執行類型斷言?

如何對 Go `reflect.TypeOf()` 結果執行類型斷言?

Patricia Arquette
發布: 2024-12-24 22:06:20
原創
336 人瀏覽過

How Can I Perform Type Assertion on a Go `reflect.TypeOf()` Result?

在Go中使用reflect.TypeOf()進行類型斷言

在Go中,當使用介面時,可能需要執行類型斷言取得底層的具體類型。出現的問題是如何將類型(由reflect.TypeOf()返回)轉換為特定類型以進行斷言。

問題:

考慮範例程式碼:

func IdentifyItemType(name string) interface{} {
    var item interface{}
    switch name {
    default:
        item = Article{}
    }
    return item
}
登入後複製

在這裡,我們的目標是根據字串名稱識別結構體(文章) 。然而,類型斷言需要一個類型,但reflect.TypeOf()傳回一個Type。

解:

如果目標是開啟外層的類型interface{},反射不是必需的:

switch x.(type){
  case int: 
    dosomething()
}
登入後複製

但是,要切換介面內的屬性類型,反射可以是使用:

s := reflect.ValueOf(x)
for i:=0; i<s.NumValues; i++{
  switch s.Field(i).Interface().(type){
    case int: 
      dosomething()
  }
}
登入後複製

這允許在介面的屬性上進行類型的切換。雖然不是一個優雅的解決方案,但它提供了功能,直到發現更好的替代方案。

以上是如何對 Go `reflect.TypeOf()` 結果執行類型斷言?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板