Heim >Backend-Entwicklung >Golang >Warum wird durch die Dereferenzierung eines Zeigers in Go die ursprüngliche Struktur nicht aktualisiert?
Zeiger-Dereferenzierung in Go
In Go umfasst die Zeiger-Dereferenzierung den Zugriff auf den Wert, der in der Speicheradresse gespeichert ist, auf die eine Zeigervariable zeigt.
Problem:
In einem bereitgestellten Beispiel In den Go-Tutorials tritt das erwartete Verhalten der Zeiger-Dereferenzierung nicht auf. Wenn eine Zeigervariable verwendet wird, um den Wert einer Struktur zu ändern, werden die Änderungen nicht an die dereferenzierte Kopie der Struktur weitergegeben.
Erklärung:
Das t := * Die q-Operation erstellt eine Kopie der Struktur, auf die q zeigt. Spätere Änderungen an q haben keinen Einfluss auf t. Dieses Verhalten ist zu erwarten, da Go Zeiger als Werte behandelt und Zuweisungen Kopiervorgänge sind.
Um Änderungen zu beobachten, die durch q in t vorgenommen werden, ist es notwendig, einen Zeiger auf die Struktur beizubehalten, anstatt den Wert zu kopieren. Dies kann erreicht werden, indem stattdessen q t zugewiesen wird:
t := q
C/C-Vergleich:
Das Zeiger-Dereferenzierungsverhalten in Go ähnelt dem in C/ C . In beiden Sprachen speichern Zeiger die Adresse eines Werts, und ihre Dereferenzierung ermöglicht den Zugriff auf den tatsächlichen Wert. In Go führen Zuweisungen zu Zeigern jedoch zum kopierten Wert, während sie in C/C den referenzierten Wert direkt ändern.
Das obige ist der detaillierte Inhalt vonWarum wird durch die Dereferenzierung eines Zeigers in Go die ursprüngliche Struktur nicht aktualisiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!