„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 > Wie erhält man Feldadressen in verschachtelten Strukturen mithilfe von Reflection?

Wie erhält man Feldadressen in verschachtelten Strukturen mithilfe von Reflection?

Veröffentlicht am 10.11.2024
Durchsuche:352

How to Obtain Field Addresses in Nested Structures Using Reflection?

Erhalten von Feldadressen in verschachtelten Strukturen mithilfe von Reflection

In diesem Szenario möchten Sie verschachtelte Strukturen durchqueren und untersuchen und die Adressen von Nichtstrukturen erhalten -Zeigerfelder darin. Mithilfe von Reflektion verfügen Sie über eine Funktion, die Felder durchläuft, jedoch auf Schwierigkeiten stößt, die Speicheradresse von Nicht-Zeigerfeldern in eingebetteten Unterstrukturen zu ermitteln.

Um dieses Problem zu beheben, ist es wichtig zu beachten, dass valueField.Interface() dies tut liefert nicht das erwartete Ergebnis, da es den tatsächlich im Feld gespeicherten Wert zurückgibt, der bei der Arbeit mit Nicht-Zeiger-Typen nicht gültig ist.

Die Lösung liegt darin, die InspectStructV-Funktion so zu ändern, dass sie stattdessen einen „reflect.Value“ empfängt eine Schnittstelle{}. Dadurch können Sie das Reflexionsobjekt direkt manipulieren und die Adresse des Felds abrufen. Darüber hinaus zeigt valueField, das zuvor den Schnittstellenwert enthielt, beim rekursiven Aufruf von InspectStructV für Strukturfelder jetzt direkt auf den Reflexionswert für die verschachtelte Struktur, um sicherzustellen, dass die Adresse korrekt abgerufen werden kann.

Hier ist der überarbeitete Code snippet:

func InspectStructV(val reflect.Value) {
    if val.Kind() == reflect.Interface && !val.IsNil() {
        elm := val.Elem()
        if elm.Kind() == reflect.Ptr && !elm.IsNil() && elm.Elem().Kind() == reflect.Ptr {
            val = elm
        }
    }
    if val.Kind() == reflect.Ptr {
        val = val.Elem()
    }

    for i := 0; i 

Durch diese Änderungen können Sie die Speicheradressen von Nicht-Zeigerfeldern erfolgreich abrufen, selbst wenn sie sich in verschachtelten Strukturen befinden.

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