如何取得基於原始類型的類型的reflect.Interface種類
在Go中,當使用實作介面的類型時但在其實作中依賴原始類型,因此有必要取得reflect.Kind作為reflect.Interface。本文解決了這個需求並提供了解決方案。
問題
考慮以下情況:
type ID interface { myid() } type id string func (id) myid() {}
這裡,ID 是一個介面透過id實現,id是一個字串。當我們使用reflect.TypeOf(id)取得類型描述符時,結果不是想要的reflect.Interface而是reflect.String。
解決方案
要解決此問題,需要將指向介面值的指標而不是值本身傳遞給reflect.TypeOf()。這可以防止介面{}中值的隱式包裝。
id := ID(id("test")) t := reflect.TypeOf(&id).Elem() fmt.Println(t.Kind()) // Output: "interface"
在此範例中,reflect.TypeOf(&id) 傳回一個指向介面值的指針,然後使用 Elem() 將其解開以取得介面本身的類型描述符。這種方法提供了所需的reflect.Interface種類。
附加說明
相同的技術可用於取得任何類型的reflect.Type,當它傳回reflect.Interface時呼叫 Kind()。只需將指向值或類型的指標傳遞給reflect.TypeOf()。
以上是如何根據原始類型取得Go類型的reflect.Interface種類?的詳細內容。更多資訊請關注PHP中文網其他相關文章!