首頁 >後端開發 >Golang >如何根據原始類型取得Go類型的reflect.Interface種類?

如何根據原始類型取得Go類型的reflect.Interface種類?

Barbara Streisand
Barbara Streisand原創
2024-12-25 08:43:09569瀏覽

How to Get reflect.Interface Kind for a Go Type Based on a Primitive Type?

如何取得基於原始類型的類型的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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn