Heim >Backend-Entwicklung >Golang >Wie ändere ich Werte durch Zeiger in Go-Funktionen und welche unterschiedlichen Ansätze gibt es?

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

Susan Sarandon
Susan SarandonOriginal
2024-10-28 05:10:30654Durchsuche

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>

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!

Stellungnahme:
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