Werte durch Zeiger in Go ändern
In Go ermöglicht die Übergabe von Zeigern an Funktionen die direkte Manipulation der Zeigerwerte. Beim Zuweisen von Werten zu Zeigern sind jedoch bestimmte Nuancen zu berücksichtigen.
Zuweisen von Zeigern ohne Wertänderung
Beachten Sie den folgenden Code:
<code class="go">type Test struct { Value int } func main() { var i Test = Test{2} var p *Test = &i f(p) println(i.Value) // 2 } func f(p *Test) { // Assigning a new pointer value p = &Test{4} }</code>
In diesem Code ist p ein Zeiger auf die i-Struktur. Innerhalb der f-Funktion ändert die Zuweisung eines neuen Zeigerwerts zu p den Wert von i nicht. Dies liegt daran, dass p eine lokale Variable innerhalb von f ist und die Änderung ihres Werts nur Auswirkungen auf die lokale Kopie hat.
Punktwerte ändern
Um den Wert von i tatsächlich zu ändern, müssen Sie Sie müssen den Wert der spitzen Struktur ändern. Dies kann über den Dereferenzierungsoperator (*) erfolgen. Zum Beispiel:
<code class="go">func f(p *Test) { p.Value = 4 }</code>
Hier dereferenziert p.Value den Zeiger p und weist dem Wertfeld der gezeigten Struktur den Wert 4 zu. Diese Änderung wird in i widergespiegelt, wenn f zurückkehrt.
Zeiger Zeigern zuweisen
Alternativ können Sie den Zeiger selbst innerhalb der f-Funktion ändern. Dies erfordert jedoch die Übergabe der Adresse der Zeigervariablen (&p) an f.
<code class="go">func f(p **Test) { *p = &Test{4} }</code>
In diesem Fall dereferenziert *p den Doppelzeiger p und weist einen neuen Zeigerwert zu, wodurch die p-Variable effektiv geändert wird im Wesentlichen. Dieser Ansatz ist jedoch nicht so einfach und kann weniger effizient sein als die direkte Änderung des Zeigerwerts.
Fazit
Bei der Übergabe von Zeigern an Funktionen ist es wichtig, die zu verstehen Unterschied zwischen dem Zuweisen neuer Zeiger (p = &Test{4}) und dem Ändern der Zeigerwerte (p.Value = 4). Der letztere Ansatz ermöglicht die direkte Manipulation des Strukturwerts, während ersterer nur den Zeiger selbst ändert.
Das obige ist der detaillierte Inhalt vonWie ändere ich Werte durch Zeiger in Go-Funktionen und welche unterschiedlichen Ansätze gibt es?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!