Heim  >  Artikel  >  Backend-Entwicklung  >  Warum benötige ich einen Zeigerempfänger, um ein Element aus einem Slice in einer Struktur zu entfernen?

Warum benötige ich einen Zeigerempfänger, um ein Element aus einem Slice in einer Struktur zu entfernen?

Barbara Streisand
Barbara StreisandOriginal
2024-11-17 11:29:02973Durchsuche

Why Do I Need a Pointer Receiver to Remove an Element from a Slice in a Struct?

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!

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