Heim > Artikel > Backend-Entwicklung > Warum benötige ich einen Zeigerempfänger, um ein Element aus einem Slice in einer Struktur zu entfernen?
Entfernen eines Elements aus einem Slice in einer Struktur
Um ein Element aus einem Slice in einer Struktur zu entfernen, müssen Sie einen Zeigerempfänger verwenden , statt eines Wertempfängers. Ein Wertempfänger ändert eine Kopie der ursprünglichen Struktur, während ein Zeigerempfänger die ursprüngliche Struktur selbst ändert.
Codebeispiel
Betrachten Sie diesen Code, um einen Freund aus einem zu entfernen Gaststruktur:
type Guest struct { id int name string surname string friends []int } func (self Guest) removeFriend(id int) { for i, other := range self.friends { if other == id { self.friends = append(self.friends[:i], self.friends[i+1:]...) break } } }
Dieser Code funktioniert nicht, da er einen Wertempfänger verwendet, (self Gast). Um die ursprüngliche Struktur zu ändern, müssen Sie einen Zeigerempfänger (self Guest)* verwenden.
Korrekter Code
func (self *Guest) removeFriend(id int) { for i, other := range self.friends { if other == id { self.friends = append(self.friends[:i], self.friends[i+1:]...) break } } }
Jetzt Durch den Aufruf von „guest1.removeFriend(3)“ wird der Freund mit der ID 3 aus „guest1“ entfernt struct.
Hinweis:
Beachten Sie auch, dass die Verwendung von Empfängernamen wie (self) und (this) nicht zulässig ist idiomatisch in Go. Verwenden Sie stattdessen den Namen der Struktur, z. B. (guest).
Das obige ist der detaillierte Inhalt vonWarum benötige ich einen Zeigerempfänger, um ein Element aus einem Slice in einer Struktur zu entfernen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!