Typ, Wert und Reflexion in Go verstehen
In Go bietet Reflexion Mechanismen zum Überprüfen und Bearbeiten von Code zur Laufzeit. Es bietet zwei grundlegende Typen: „reflect.Type“ und „reflect.Value“, die jeweils unterschiedliche Möglichkeiten zur Interaktion mit Programmelementen bieten.
Beachten Sie den folgenden Codeausschnitt:
<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>
Unterschied zwischen Typ und Wert in Reflection
reflect.Type:
reflect.Value:
Beispielverwendung
Im bereitgestellten Code-Snippet prüft die Switch-Anweisung, ob i eine Instanz von „*Person“ ist. Wenn ja, gibt „reflect.TypeOf(i)“ den Typ der Person-Struktur zurück und ermöglicht den Zugriff auf ihre Feld-Tags (z. B. t.Elem().Field(0).Tag`).
In der Zwischenzeit Reflect.ValueOf(i) gibt einen *reflect.Value für die Person-Instanz zurück. Durch den Aufruf von v.Elem().Field(0).String() rufen Sie die Zeichenfolgendarstellung des ersten Feldwerts ab, unabhängig vom spezifischen Typ der Instanz.
Das obige ist der detaillierte Inhalt vonWie unterscheiden sich „reflect.Type' und „reflect.Value' in der Go-Reflexion und welche Erkenntnisse liefern sie über Programmelemente zur Laufzeit?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!