ホームページ > バックエンド開発 > Golang > プリミティブ型に基づいた Go 型のreflect.Interface Kindを取得するにはどうすればよいですか?

プリミティブ型に基づいた Go 型のreflect.Interface Kindを取得するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-25 08:43:09
オリジナル
564 人が閲覧しました

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

プリミティブ型に基づいて型のreflect.Interface Kindを取得する方法

Goで、インターフェースを実装する型を操作する場合ただし、実装ではプリミティブ型に依存するため、reflect.Kind をreflect.Interfaceとして取得する必要があります。この記事では、このニーズに対応し、解決策を提供します。

問題

次の状況を考えてみましょう:

type ID interface {
    myid()
}

type id string

func (id) myid() {}
ログイン後にコピー

ここで、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 Kindが提供されます。

補足

同じ手法を使用して、reflect.Interfaceを返す任意のタイプのreflect.Typeを取得できます。 Kind() を呼び出します。単に値または型へのポインタをreflect.TypeOf().

に渡すだけです。

以上がプリミティブ型に基づいた Go 型のreflect.Interface Kindを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート