ホームページ  >  記事  >  バックエンド開発  >  プリミティブ型に基づく型のreflect.Kinを取得します。

プリミティブ型に基づく型のreflect.Kinを取得します。

WBOY
WBOY転載
2024-02-09 15:12:09566ブラウズ

プリミティブ型に基づく型のreflect.Kinを取得します。

プリミティブ型に基づいて、reflect.Kind を取得することは、PHP プログラミングにおける重要なスキルです。 reflect.Kind は、PHP が提供するリフレクション クラス ライブラリのプロパティであり、変数のデータ型を決定するために使用できます。 Reflect.Kindを利用することで、変数の型を簡単に取得し、それに応じた演算や処理を行うことができます。 PHP 開発者にとって、このスキルを習得すると、リフレクション メカニズムをよりよく理解して使用できるようになり、コードの読みやすさと柔軟性が向上します。この記事では、PHP エディターの Baicao が、プリミティブ型に基づいて Reflect.Kind を取得する方法を詳細に紹介し、読者がこの知識ポイントをよりよく習得できるように、いくつかの実用的な例とテクニックを共有します。

質問内容

インターフェースを実装する型のreflect.interfaceとしてreflect.kindを使用したいのですが、その実装はプリミティブ型に基づいています: type id string

この質問に対するもう 1 つの答えは、kind() を呼び出すときに、reflect.interfaces を返す型の Reflect.type を取得する方法かもしれません。

これは、外出先のプレイグラウンドでの完全な例です:

type ID interface {
    myid()
}

type id string

func (id) myid() {}

func main() {
    id := ID(id("test"))
    
    fmt.Println(id)
    fmt.Println(reflect.TypeOf(id))
    
    // How to get the kind to return "reflect.Interface" from the var "id"?
    fmt.Println(reflect.TypeOf(id).Kind())
}

解決策

reflect.typeof() (および reflect.valueof() ) インターフェース {} が必要です。基本的に、reflect.typeof() に渡す値がどのようなものであっても、それがまだインターフェース値でない場合は、暗黙的に interface{} にラップされます。渡された値がすでにインターフェース値である場合、その中に格納されている具体的な値は interface{} として渡されます。

この「再パッケージ化」を回避するために、これはインターフェイスへのポインターが意味をなすまれなケースの 1 つであり、実際、ここでそれを回避することはできません。インターフェイス値へのポインタを渡す必要があります。

したがって、インターフェイスへのポインタを渡すと、ポインタは interface{} 値でラップされます。 type.elem() を使用して、「ポインター型」の型記述子、つまりポインター型の要素型を取得できます。これは、探しているインターフェイス型の型記述子になります。のために。 p> ###例:### リーリー

出力内容 (

go playground

で試してください): リーリー 関連する質問を表示:

Go の Reflect.valueof() と value.elem() の違いは何ですか?

以上がプリミティブ型に基づく型のreflect.Kinを取得します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。