Heim > Backend-Entwicklung > Golang > Was ist der Unterschied zwischen „reflect.ValueOf()' und „Value.Elem()' in Go?

Was ist der Unterschied zwischen „reflect.ValueOf()' und „Value.Elem()' in Go?

Barbara Streisand
Freigeben: 2024-12-13 17:04:10
Original
984 Leute haben es durchsucht

What's the Difference Between `reflect.ValueOf()` and `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
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage