reflect.ValueOf() と Value.Elem() の違いを理解する
Reflect.ValueOf() はリフレクションへのゲートウェイとして機能しますを使用すると、文字列やintegers.
一方、Value.Elem() は、reflect.Value 内のメソッドとして機能します。これを使用して、元のreflect.Valueによってカプセル化された値によって参照される値(reflect.Valueでもあります)を取得できます。この目的には、reflect.Indirect() も利用できることに注意してください。
リフレクションから非リフレクションに戻すには、ラップされた値を単純なインターフェイスとして返す Value.Interface() メソッドを使用します。 }.
var i int = 3 var p *int = &i fmt.Println(p, i) // Output: 0x414020 3 v := reflect.ValueOf(p) fmt.Println(v.Interface()) // Output: 0x414020 v2 := v.Elem() fmt.Println(v2.Interface()) // Output: 3
高度な使用例: Value.Elem()インターフェイス
reflect.Value がインターフェイス値をラップする場合、Value.Elem() はそのインターフェイス内の具体的な値も取得できます。
var r io.Reader = os.Stdin v := reflect.ValueOf(r) fmt.Println(v.Type()) // Output: *os.File v2 := reflect.ValueOf(&r) fmt.Println(v2.Type()) // Output: *io.Reader fmt.Println(v2.Elem().Type()) // Output: io.Reader fmt.Println(v2.Elem().Elem().Type()) // Output: *os.File
以上がGo の `reflect.ValueOf()` と `Value.Elem()` の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。