Wie erhalte ich mithilfe von Reflection in Go einen Zeiger auf einen Wert?

Mary-Kate Olsen
Freigeben: 2024-11-01 15:23:02
Original
547 Leute haben es durchsucht

How to Get a Pointer to a Value Using Reflection in Go?

Zeiger auf Wert mithilfe von Reflection abrufen

Die Überprüfung der Felder einer Schnittstelle erfordert die Verwendung von Reflection in Go. Beim Versuch, die Adresse von Nicht-Zeigerfeldern abzurufen, treten jedoch Herausforderungen auf. Dieser Artikel befasst sich mit diesen Herausforderungen und bietet eine Lösung.

Im bereitgestellten Codebeispiel durchläuft eine Funktion namens InspectStruct eine bestimmte Struktur und gibt Details zu jedem Feld aus. Während die meisten Felder berücksichtigt werden, führen Nicht-Zeigerfelder, die auf höheren Ebenen innerhalb der Struktur eingebettet sind, zu „nicht adressierbaren“ Ergebnissen.

Lösung

Das Problem liegt in der Verwendung der Methode „reflect.Value.Interface()“. Um die Adresse eines Nicht-Zeigerfelds zu erhalten, wird empfohlen, „reflect.Value“ anstelle von „interface{}“ an die Funktion „InspectStruct“ zu übergeben. Der korrigierte Code unten enthält diese Änderung:

<code class="go">func InspectStructV(val reflect.Value) {
    // ... (remaining code is identical)
}

func InspectStruct(v interface{}) {
    InspectStructV(reflect.ValueOf(v))
}</code>
Nach dem Login kopieren

Mit dieser Änderung funktioniert die InspectStruct-Funktion wie vorgesehen und liefert die Adressen aller Felder innerhalb der Struktur, unabhängig von ihrer Tiefe oder ihrem Zeigerstatus. Dies ist aus den aktualisierten Testergebnissen ersichtlich:

Field Name: Id,  Field Value: 1,     Address: 0x408125440 , Field type: int   , Field kind: int
Field Name: F,   Field Value: {2 {3}},   Address: 0x408125444 , Field type: main.V    , Field kind: struct
Field Name: Id,  Field Value: 2,     Address: 0x408125450 , Field type: int   , Field kind: int
Field Name: F,   Field Value: {3},   Address: 0x408125458 , Field type: main.Z    , Field kind: struct
Field Name: Id,  Field Value: 3,     Address: 0x408125460 , Field type: int   , Field kind: int
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie erhalte ich mithilfe von Reflection in Go einen Zeiger auf einen Wert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!