Heim >Backend-Entwicklung >Golang >Wie ändere ich ein Slice innerhalb einer Struktur in Go?

Wie ändere ich ein Slice innerhalb einer Struktur in Go?

Susan Sarandon
Susan SarandonOriginal
2024-11-21 06:00:14450Durchsuche

How to Modify a Slice Within a Struct in Go?

So entfernen Sie ein Element aus einem Slice in einer Struktur

Das Entfernen eines Elements aus einem Slice innerhalb einer Struktur erfordert die Berücksichtigung mehrerer wichtiger Überlegungen.

Problem: Slice-Länge bleibt unverändert

Im bereitgestellten Code-Snippet zielt die Methode „removeFriend“ darauf ab, ein Element aus dem Friends-Slice zu entfernen. Allerdings wird das letzte Element des Slice dupliziert, anstatt dass der Slice kürzer wird. Dies liegt daran, dass die Methode einen Wertempfänger verwendet, der eine Kopie der Struktur anstelle des ursprünglichen Werts ändert.

Lösung: Verwenden Sie einen Zeigerempfänger

Um sicherzustellen, dass sich Änderungen ergeben Da sich innerhalb der Methode vorgenommene Änderungen auf die ursprüngliche Struktur auswirken, sollte ein Zeigerempfänger verwendet werden. Dadurch kann die Methode die tatsächliche Strukturinstanz ändern. Die Syntax für einen Zeigerempfänger in Go lautet func (receiver *struct_name).

Beispiel:

type Guest struct {
    id      int
    name    string
    surname string
    friends []int
}

func (g *Guest) removeFriend(id int) {
    for i, other := range g.friends {
        if other == id {
            g.friends = append(g.friends[:i], g.friends[i+1:]...)
            break
        }
    }
}

Erklärung:

Durch die Verwendung eines Zeigerempfängers (*Guest) ändert die Methode „removeFriend“ nun den Friends-Slice der ursprünglichen Guest-Struktur.

Idiomatische Empfängerbenennung

Das ist wichtig Bitte beachten Sie, dass Empfängernamen wie „self“ und „this“ in Go nicht häufig verwendet werden. Stattdessen werden spezifischere Namen wie g oder Gast bevorzugt, um die Absicht der Methode zu vermitteln.

Das obige ist der detaillierte Inhalt vonWie ändere ich ein Slice innerhalb einer Struktur in Go?. 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