Go の型、値、およびリフレクションを理解する
Go では、リフレクションは実行時にコードを検査および操作するメカニズムを提供します。これは、reflect.Type とreflect.Value という 2 つの基本的な型を提供し、それぞれがプログラム要素と対話するための異なる機能を提供します。
次のコード スニペットを考えてみましょう。
<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>
両者の違いReflection の型と値
reflect.Type:
reflect.Value:
使用例
提供されたコード スニペットでは、switch ステートメントは i が「*person」のインスタンスであるかどうかをチェックします。その場合、reflect.TypeOf(i) は Person 構造体の型を返し、そのフィールド タグ (例: t.Elem().Field(0).Tag`) へのアクセスを許可します。
その間、 Reflect.ValueOf(i) は、Person インスタンスの *reflect.Value を返します。 v.Elem().Field(0).String() を呼び出すことで、インスタンスの特定の型に関係なく、最初のフィールドの値の文字列表現を取得します。
以上がGo リフレクションにおける「reflect.Type」と「reflect.Value」はどのように異なりますか?また、それらは実行時にプログラム要素についてどのような洞察を提供しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。