Heim > Backend-Entwicklung > Golang > Warum benötige ich einen Zeigerempfänger, um Elemente aus einem Slice innerhalb einer Go-Struktur zu entfernen?

Warum benötige ich einen Zeigerempfänger, um Elemente aus einem Slice innerhalb einer Go-Struktur zu entfernen?

DDD
Freigeben: 2024-11-15 11:43:02
Original
742 Leute haben es durchsucht

Why Do I Need a Pointer Receiver to Remove Elements from a Slice within a Go Struct?

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

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

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

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!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage