Heim >Backend-Entwicklung >Golang >Wie kann ich innerhalb einer Go-Struktur korrekt an ein Slice anhängen?

Wie kann ich innerhalb einer Go-Struktur korrekt an ein Slice anhängen?

Susan Sarandon
Susan SarandonOriginal
2024-12-13 01:29:14267Durchsuche

How to Correctly Append to a Slice within a Go Struct?

Go – Anhängen an ein Slice in einer Struktur

In Go erfordert das Anhängen an ein Slice innerhalb einer Struktur sorgfältige Beachtung von Variablenreferenzen. Dies kann beim Arbeiten mit Slices innerhalb von Strukturen verwirrend sein, insbesondere wenn die Methode, die die Struktur empfängt, ein Zeigerempfänger ist.

Problem

Bedenken Sie den folgenden Code:

package main

import "fmt"

type MyBoxItem struct {
    Name string
}

type MyBox struct {
    Items []MyBoxItem
}

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

func main() {
    item1 := MyBoxItem{Name: "Test Item 1"}
    box := MyBox{[]MyBoxItem{}} // Initialize box with an empty slice

    AddItem(box, item1)  // This is where the problem arises

    fmt.Println(len(box.Items))
}

Das Problem tritt beim Aufruf der AddItem-Methode auf. Wenn Sie die Methode als AddItem(box, item1) anstelle von box.AddItem(item1) aufrufen, wird eine neue Kopie der Box-Struktur erstellt, anstatt das Original zu ändern.

Lösung

Um dieses Problem zu beheben, weisen Sie das Ergebnis der AddItem-Methode wieder dem ursprünglichen Slice in der Struktur zu:

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

Auf diese Weise Die am Slice innerhalb der AddItem-Methode vorgenommenen Änderungen werden im ursprünglichen Slice-Feld der Struktur widergespiegelt.

Überarbeitete Hauptfunktion

Mit der aktualisierten AddItem-Methode wurde das korrigiert Die Hauptfunktion sollte wie folgt lauten:

func main() {
    item1 := MyBoxItem{Name: "Test Item 1"}
    box := MyBox{[]MyBoxItem{}}

    box.AddItem(item1)  // Call the method correctly

    fmt.Println(len(box.Items))
}

Jetzt gibt die Ausgabe korrekt die Länge des Items-Slice aus, die nach dem Hinzufügen 1 sein sollte Artikel.

Das obige ist der detaillierte Inhalt vonWie kann ich innerhalb einer Go-Struktur korrekt an ein Slice anhängen?. 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