In Go kann die Übergabe von Variablen als Funktionsargumente manchmal Compilerfehler auslösen, die durch die Verwendung von Zeigern behoben werden können. Die Unterscheidung zwischen &- und *-Zeigern führt jedoch oft zu Verwirrung. Ziel dieses Artikels ist es, die Unterschiede und Verwendungsszenarien für beide Zeigertypen zu verdeutlichen.
In Ihrem Beispiel ist der Fehler wahrscheinlich auf die Nichtübereinstimmung zwischen dem erwarteten und dem tatsächlichen Argumenttyp zurückzuführen Variable übergeben. Die Dekodierfunktion erfordert eine Adresse oder einen Zeiger auf eine Benutzerstruktur, aber Sie übergeben den Wert direkt. Um dieses Problem zu lösen, können Sie den &-Operator verwenden, um die Adresse der Benutzervariablen abzurufen:
if err := decoder.Decode(&u); err != nil { http.Error(rw, "could not decode request", http.StatusBadRequest) return }
Zeiger sind Variablen, die Adressen anderer Variablen enthalten. Der &-Operator gibt die Adresse einer Variablen zurück, während der *-Operator uns den Zugriff auf den Wert an dieser Adresse ermöglicht.
Im obigen Beispiel gibt &u die Adresse der Benutzerstruktur an, die dann an die übergeben wird Funktion dekodieren, die einen Zeiger erwartet.
Wenn Sie jedoch die Benutzerinstanz erstellt hätten mit:
u := new(User)
Dann wären Sie bereits ein Zeiger, und Der &-Operator wäre nicht erforderlich. Sie können auch explizit einen Zeiger erstellen, indem Sie Folgendes verwenden:
var u *User
Der Hauptunterschied zwischen & und * besteht darin, dass * eine Umleitung auf den an der Adresse gespeicherten Wert darstellt. while & gibt die Adresse zurück selbst.
Beispiel:
var y int var pointerToY *int var pointerToPointerToInt **int y = 10 pointerToY = &y pointerToPointerToInt = &pointerToY
Jetzt:
& (Adress-of-Operator):
Beispiel:
func swap(x, y *int) { *x, *y = *y, *x }
* (Dereferenzierungsoperator):
Beispiel:
var p *int *p = 10
Schlussfolgerung:
Das Verständnis von &- und -Zeigern ist in Go für eine effiziente Variablenverarbeitung und die Behebung von Compilerfehlern von entscheidender Bedeutung. Der Hauptunterschied liegt im „Umleitungsverhalten“ von , während & die tatsächliche Adresse der Variablen zurückgibt. Durch sorgfältiges Abwägen der beabsichtigten Verwendungsszenarien können Sie Zeiger in Ihrem Go-Code effektiv für optimale Leistung und Korrektheit nutzen.
Das obige ist der detaillierte Inhalt vonGo-Zeiger: Was ist der Unterschied zwischen „&' (Adresse von) und „*' (Dereferenzierung)?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!