Elemente aus einem Slice innerhalb einer Struktur entfernen
In Go erfordert das Ändern eines Empfängerobjekts innerhalb einer Methode die Verwendung eines Zeigerempfängers. Hierbei handelt es sich um eine Technik, mit der statt einer Kopie ein Verweis auf das Objekt übergeben wird, wodurch innerhalb der Methode vorgenommene Änderungen im Originalobjekt widergespiegelt werden können.
Beachten Sie die folgende Guest-Struktur:
type Guest struct { id int name string surname string friends []int }
Um ein Element aus dem „Friends“-Slice zu entfernen, könnte man zunächst den folgenden Code schreiben:
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 würde das Element jedoch nicht wie erwartet entfernen, da die Methode „removeFriend“ verwendet wird ein Wertempfänger anstelle eines Zeigerempfängers. Daher werden die am Slice „friends“ in der Methode vorgenommenen Änderungen nicht auf das ursprüngliche Objekt übertragen.
Um dieses Problem zu beheben, sollte die Methode „removeFriend“ überarbeitet werden, um einen Zeigerempfänger zu verwenden:
func (self *Guest) removeFriend(id int) { // Same logic as before }
Durch die Verwendung eines Zeigerempfängers ändert die Methode jetzt das Originalobjekt und nicht eine Kopie. Dadurch werden die innerhalb der Methode am „Friends“-Slice vorgenommenen Änderungen erfolgreich auf das ursprüngliche Guest-Objekt übertragen.
Das obige ist der detaillierte Inhalt vonWarum benötige ich einen Zeigerempfänger, um Elemente aus einem Slice innerhalb einer Go-Struktur zu entfernen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!