Struktur-Setter verwenden: Die Bedeutung von Zeigern verstehen
Beim Arbeiten mit Strukturen in Go kann die Verwendung von Settern die Eigenschaften der Struktur ändern. Es kann jedoch vorkommen, dass die gewünschten Änderungen nicht wie erwartet umgesetzt werden. Dies liegt an der Art und Weise, wie Strukturen an Funktionen übergeben werden.
Im bereitgestellten Beispielcode:
type T struct { Val string } func (t T) SetVal(s string) { t.Val = s } func (t *T) SetVal2(s string) { (*t).Val = s }
Die bereitgestellte SetVal-Funktion ändert die ursprüngliche Struktur nicht wie erwartet, da eine Kopie von Die Struktur wird als Wert an die Funktion übergeben. An dieser Kopie vorgenommene Änderungen wirken sich nicht auf die ursprüngliche Struktur aus.
Alternativ erwartet die SetVal2-Funktion einen Zeiger auf eine Struktur, sodass sie die ursprüngliche Struktur ändern kann. Dies liegt daran, dass Go Zeiger auf Strukturen nach Wert übergibt, was bedeutet, dass die Funktion einen Verweis auf denselben Speicherort wie die ursprüngliche Struktur erhält.
Um dieses Verhalten zu demonstrieren, betrachten Sie den folgenden Code:
v := T{"abc"} fmt.Println(v) // {abc} v.SetVal("pdq") fmt.Println(v) // {abc} v.SetVal2("xyz") fmt.Println(v) // {xyz}
In diesem Beispiel wird die ursprüngliche Struktur v nicht von SetVal, sondern von SetVal2 geändert. Dies wird durch den Unterschied in der Ausgabe deutlich.
Die wichtigste Erkenntnis ist, dass es in Go bei der Verwendung von Settern für Strukturen wichtig ist, den Unterschied zwischen der Übergabe per Wert und der Übergabe per Zeiger zu verstehen. Durch die Verwendung von Zeigern können Funktionen die ursprüngliche Struktur ändern, während durch die Übergabe von Werten eine Kopie der Struktur innerhalb der Funktion erstellt wird.
Das obige ist der detaillierte Inhalt vonWarum benötigen Go-Struct-Setter Zeiger, um die ursprüngliche Struktur zu ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!