Heim >Backend-Entwicklung >Golang >Was ist der Unterschied zwischen „reflect.ValueOf()' und „Value.Elem()' in Go?
Den Unterschied zwischen Reflect.ValueOf() und Value.Elem() verstehen
Reflect.ValueOf() dient als Tor zur Reflexion , wodurch Sie einen Reflect.Value-Deskriptor für Nicht-Reflexionswerte wie Zeichenfolgen oder Ganzzahlen erhalten können.
Ein Andererseits fungiert Value.Elem() als Methode innerhalb vonflect.Value. Es kann verwendet werden, um den Wert (auch ein „reflect.Value“) abzurufen, auf den der durch den ursprünglichen „reflect.Value“ gekapselte Wert verweist. Beachten Sie, dass „reflect.Indirect()“ auch für diesen Zweck verwendet werden kann.
Um von der Reflexion zurück zur Nichtreflexion zu wechseln, verwenden Sie die Methode Value.Interface(), die den umschlossenen Wert als einfache Schnittstelle zurückgibt{ }.
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
Erweiterter Anwendungsfall: Value.Elem() für Schnittstellen
If reflektieren.Value Umschließt einen Schnittstellenwert. Value.Elem() kann auch den konkreten Wert innerhalb dieser Schnittstelle abrufen.
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
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen „reflect.ValueOf()' und „Value.Elem()' in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!