Go のreflect.ValueOf() と Value.Elem() の違いを理解する
リフレクションは、Go の強力なテクニックです。実行時にデータ構造を検査および操作できます。リフレクションにおける 2 つの主要な関数は、reflect.ValueOf() と Value.Elem() です。ただし、初心者にとっては混乱する可能性があります。
reflect.ValueOf()
reflect.ValueOf() は、任意の型の値を受け取り、その値を表すreflect.Value。 Reflect.Value には、値の型、サイズ、その他のプロパティに関する情報が含まれています。
Value.Elem()
Value.Elem() はメソッドです。現在のreflect.Value内に含まれる値またはポインタを返すreflect.Value。これは一般に次の目的で使用されます:
使用法
次の例は、両方の関数の使用法を示しています。
func main() { var i int = 3 var p *int = &i // Get a reflect.Value from an int iv := reflect.ValueOf(i) // Get a reflect.Value from a pointer to int pv := reflect.ValueOf(p) // Retrieve the dereferenced value of the pointer pv_d := pv.Elem() fmt.Println(iv.Type(), pv.Type(), pv_d.Type()) // Output: int *int int }
この例では、iv はReflect.Value は整数値 3 を直接表し、pv は整数へのポインタを表す Reflect.Value です。このコンテキストの Elem() メソッドは、ポインターの間接参照値を表す Reflect.Value を返します。これは基本的に iv.
いつ使用するか .Elem()
次の状況では Value.Elem() を使用します:
以上がGo リフレクション: `Value.Elem()` をいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。