„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Was ist der Hauptunterschied zwischen „reflect.Type“ und „reflect.Value“ in der Go-Reflexion?

Was ist der Hauptunterschied zwischen „reflect.Type“ und „reflect.Value“ in der Go-Reflexion?

Veröffentlicht am 08.11.2024
Durchsuche:580

What is the key distinction between reflect.Type and reflect.Value in Go reflection?

Reflection-Typen und -Werte in Go

Reflections in Go ermöglichen Entwicklern die Überprüfung und Bearbeitung von Typen und Werten zur Laufzeit. Das Verständnis ihrer Unterscheidungen ist entscheidend für die effektive Nutzung von Reflection.

Type vs. Value in Reflection

In Reflection gibt Reflect.TypeOf(i) ein Reflect.Type-Objekt zurück , während „reflect.ValueOf(i)“ ein „reflect.Value“-Objekt zurückgibt.

reflect.Type

  • Stellt Informationen über den Typ bereit, z. B. seinen Namen, Paket und zugrunde liegender Typ.
  • Ermöglicht Abfragen zu seinen Methoden, Feldern und anderen typbezogenen Daten.
  • Enthält nicht den tatsächlichen Wert der an ihn übergebenen Variablen.

reflect.Value

  • Stellt den tatsächlichen Wert der an ihn übergebenen Variablen dar.
  • Ermöglicht das Lesen und Festlegen von Werten sowie die Manipulation der zugrunde liegenden Daten und Abfragen seiner Methoden und Felder.
  • Enthält eine Type()-Methode, die ihren Reflect.Type zurückgibt.

Beispiel

In das Code-Snippet:

func show(i interface{}) {
    switch t := i.(type) {
    case *Person:
        t := reflect.TypeOf(i)  // Get the type of *Person
        v := reflect.ValueOf(i)  // Get the value of i
        tag := t.Elem().Field(0).Tag
        name := v.Elem().Field(0).String() 
    }
}
  • t ist ein Reflect.Type-Objekt, das den Typ der Variablen darstellt, auf die i zeigt.
  • v ist ein Reflect.Value-Objekt, das den tatsächlichen Wert der Variablen darstellt, auf die i zeigt von i.
  • tag ist das Tag des ersten Felds (Name) der durch Reflect erhaltenen Personenstruktur.Type.
  • name ist die Zeichenfolgendarstellung des ersten Felds, das durch Reflect erhalten wurde .Wert.

Durch das Verständnis des Unterschieds zwischen Typen und Werten in der Reflexion können Entwickler die Kraft der Reflexion in verschiedenen Szenarien nutzen, einschließlich Selbstbeobachtung, dynamischem Methodenaufruf und Datenserialisierung.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3