Heim > Backend-Entwicklung > Golang > Wie wirken sich Zeiger auf die Wertänderung in Go-Funktionen aus?

Wie wirken sich Zeiger auf die Wertänderung in Go-Funktionen aus?

Linda Hamilton
Freigeben: 2024-10-27 02:32:02
Original
667 Leute haben es durchsucht

How do pointers affect value modification in Go functions?

Wertänderung mit Zeigern in Go verstehen

In Go ermöglichen Zeiger den indirekten Zugriff und die Änderung von Werten. Bei der Übergabe an Funktionen ist es jedoch wichtig zu verstehen, wie Zeiger funktionieren.

Bei der Übergabe eines Zeigers an eine Funktion treten zwei Szenarien auf: Wertänderung vs. Zeigerneuzuweisung.

Szenario 1 : Wertänderung

Bedenken Sie diesen Code:

<code class="go">type Test struct { Value int }

func main() {
   var i Test = Test {2}
   var p *Test = &amp;i
   f(p)
   println(i.Value)  // 4
}
func f(p *Test) {
   *p = Test{4}
}</code>
Nach dem Login kopieren

Hier erhält die Funktion f einen Zeiger auf die Teststruktur. Innerhalb von f wird dem dereferenzierten Zeiger (*p) eine neue Teststruktur mit dem Wert 4 zugewiesen. Dadurch wird die ursprüngliche i-Struktur in der Hauptfunktion effektiv geändert, und die Ausgabe ist 4.

Szenario 2: Neuzuweisung des Zeigers

Jetzt ändern wir den Code leicht:

<code class="go">type Test struct { Value int }

func main() {
   var i Test = Test {2}
   var p *Test = &amp;i
   f(p)
   println(i.Value)  // 2
}
func f(p *Test) {
   // ?
   p = &amp;Test{4}
}</code>
Nach dem Login kopieren

Anstatt den Zeigerwert zu ändern, weist die Funktion in diesem Fall den p-Zeiger einem neuen zu Testen Sie die Struktur mit einem Wert von 4. Da p eine lokale Variable innerhalb von f ist, wirkt sich diese Änderung nicht auf die ursprüngliche i-Struktur in der Hauptfunktion aus und die Ausgabe bleibt 2.

Lösung: Pointed ändern Wert

Um den angezeigten Wert zu ändern, müssen wir den Zeiger dereferenzieren und direkt auf das Strukturmitglied zugreifen:

<code class="go">type Test struct { Value int }

func main() {
   var i Test = Test {2}
   var p *Test = &amp;i
   f(p)
   println(i.Value)  // 4
}
func f(p *Test) {
   p.Value = 4
}</code>
Nach dem Login kopieren

Durch die Verwendung von p.Value ändern wir das Wertfeld der ursprünglichen Struktur , was zu einer Ausgabe von 4.

führt

Das obige ist der detaillierte Inhalt vonWie wirken sich Zeiger auf die Wertänderung in Go-Funktionen aus?. 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