在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中文網其他相關文章!