ホームページ  >  記事  >  バックエンド開発  >  Goのreflect.Typeとreflect.Valueの違いは何ですか?

Goのreflect.Typeとreflect.Valueの違いは何ですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-29 18:22:44743ブラウズ

 What's the Difference Between reflect.Type and reflect.Value in Go?

Go のリフレクションのタイプと値

質問:

次の Go コード スニペット内:

<code class="go">func show(i interface{}) {
    switch t := i.(type) {
    case *Person:
        t := reflect.TypeOf(i)  //what does t contain?   
        v := reflect.ValueOf(i)  //what does v contain?
        tag := t.Elem().Field(0).Tag
        name := v.Elem().Field(0).String() 
    }
}</code>

リフレクションにおける型と値の違いは何ですか?

答え:

Go では、リフレクションには 2 つの主要な構造体、reflect.Type とreflect が用意されています。 。価値。これらの型を使用すると、実行時にデータをイントロスペクトして操作できます。

  • reflect.Type: 値の名前、基になる型、構造体フィールドなどの型情報を表します。 。同じ型のすべての変数に関連付けられた情報をクエリできます。
  • reflect.Value: 個々の値を表し、そのデータを操作できるようにします。これを使用して、値の設定と取得、型間の変換、基になるデータに対するその他の操作を実行できます。

提供されたコード スニペット内:

  • t := Reflect.TypeOf(i) は、show 関数に渡される値の型を表す Reflect.Type を返します。
  • v := Reflect.ValueOf(i) は、渡された実際の値を表す Reflect.Value を返します。

型と値に関する情報にアクセスするには、次のメソッドを使用できます。

  • t.Elem(): の Reflect.Type を返します。型がポインターの場合は基になる要素。
  • t.Field(0).Tag: 型の最初のフィールドに関連付けられたタグを返します。
  • v.Elem(): 戻り値値がポインターの場合は、基になる要素のreflect.Value。
  • v.Field(0).String() : 値の最初のフィールドのデータを文字列に変換します。

以上がGoのreflect.Typeとreflect.Valueの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。