Wie ändere ich Werte durch Zeiger in Go-Funktionen und welche unterschiedlichen Ansätze gibt es?

Susan Sarandon
Freigeben: 2024-10-28 05:10:30
Original
559 Leute haben es durchsucht

How do I modify values through pointers in Go functions, and what are the different approaches?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

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!