Heim > Backend-Entwicklung > Golang > Warum bleibt das Anhängen an ein Slice in einer Go-Struktur nicht ohne Neuzuweisung bestehen?

Warum bleibt das Anhängen an ein Slice in einer Go-Struktur nicht ohne Neuzuweisung bestehen?

DDD
Freigeben: 2024-12-16 11:36:18
Original
791 Leute haben es durchsucht

Why Doesn't Appending to a Slice in a Go Struct Persist Without Reassignment?

Go – Anhängen an ein Slice innerhalb einer Struktur

In Go sind Slices Referenztypen, das heißt, sie enthalten einen Verweis auf das zugrunde liegende Array. Wenn Sie ein Element an einen Slice innerhalb einer Struktur anhängen und das Ergebnis nicht wieder dem Slice zuweisen, werden die Änderungen nicht beibehalten, wenn die Funktion zurückkehrt.

Beachten Sie den folgenden Code:

type MyBoxItem struct {
    Name string
}

type MyBox struct {
    Items []MyBoxItem
}

func (box *MyBox) AddItem(item MyBoxItem) []MyBoxItem {
    return append(box.Items, item)
}
Nach dem Login kopieren

Hier nimmt die AddItem-Methode ein Element und hängt es an den Elementabschnitt in der Boxstruktur an. Allerdings weist die Methode das Ergebnis nicht wieder dem Items-Slice zu, was bedeutet, dass das Slice nicht geändert wird, wenn die Methode zurückkehrt.

Um dies zu beheben, müssen Sie das Ergebnis des Anhängevorgangs zurück zuweisen zur Scheibe. Sie können dies tun, indem Sie die AddItem-Methode wie folgt ändern:

func (box *MyBox) AddItem(item MyBoxItem) {
    box.Items = append(box.Items, item)
}
Nach dem Login kopieren

Wenn Sie nun die AddItem-Methode aufrufen, wird das Slice innerhalb der Struktur aktualisiert. Sie können dies überprüfen, indem Sie die len-Funktion im Items-Slice aufrufen:

item1 := MyBoxItem{Name: "Test Item 1"}
item2 := MyBoxItem{Name: "Test Item 2"}

items := []MyBoxItem{}
box := MyBox{items}

box.AddItem(item1)

fmt.Println(len(box.Items)) // Output: 1
Nach dem Login kopieren

Beachten Sie, dass die AddItem-Methode für den Typ *MyBox definiert ist, was bedeutet, dass Sie sie als box.AddItem(item1) aufrufen müssen. , indem ein Zeiger auf die Box-Struktur als Argument übergeben wird.

Das obige ist der detaillierte Inhalt vonWarum bleibt das Anhängen an ein Slice in einer Go-Struktur nicht ohne Neuzuweisung bestehen?. 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