Heim > Backend-Entwicklung > Golang > Warum funktioniert das Anhängen an ein Slice in einer Go-Struct-Methode nicht immer?

Warum funktioniert das Anhängen an ein Slice in einer Go-Struct-Methode nicht immer?

DDD
Freigeben: 2025-01-03 10:15:39
Original
510 Leute haben es durchsucht

Why Doesn't Appending to a Slice in a Go Struct Method Always Work?

Slice-Manipulation in Go verstehen

In Go ist es bei der Manipulation von Slices als Eigenschaften von Strukturen wichtig, die Wertübergabe zu berücksichtigen. In bestimmten Situationen scheint das Anhängen an einen Slice innerhalb einer Methode fehlzuschlagen. Lassen Sie uns die Gründe dafür untersuchen und eine Lösung finden.

Wertübergabe in Go-Strukturen

In Go wird alles als Wert übergeben, was bedeutet, dass eine Kopie erstellt wird für jeden übergebenen Wert. Daher wirken sich alle an der Kopie innerhalb einer Methode vorgenommenen Änderungen nicht auf den Originalwert aus.

Test3: Ein fehlgeschlagener Anhängeversuch

Beachten Sie den folgenden Code:

type Test3 struct {
  all []int
}

func (c Test3) run() []int {
  c.combo()
  return c.all
}

func (c Test3) combo() {
  for i := 0; i < 2; i++ {
    c.all = append(c.all, i)
    fmt.Println("Test3 step", i + 1, c.all)
  }
}
Nach dem Login kopieren

Wenn Sie Test3.run() aufrufen, scheint es, dass c.all nicht geändert wird. Dies liegt daran, dass die Methode „combo()“ auf einer Kopie von Test3 ausgeführt wird und alle innerhalb von „combo()“ vorgenommenen Änderungen nicht auf den ursprünglichen Wert zurückgeführt werden.

Lösung: Verwendung von Zeigerempfängern

Um dieses Problem zu beheben, verwenden Sie einen Zeigerempfänger für die Methode „combo()“:

func (c *Test3) combo() {
  for i := 0; i < 2; i++ {
    c.all = append(c.all, i)
    fmt.Println("Test3 step", i + 1, c.all)
  }
}
Nach dem Login kopieren

Durch die Verwendung eines Zeigerempfängers stellen Sie sicher, dass „combo()“ ändert den ursprünglichen Test3-Wert und die Änderungen werden widergespiegelt, wenn die Methode zurückkehrt.

Das obige ist der detaillierte Inhalt vonWarum funktioniert das Anhängen an ein Slice in einer Go-Struct-Methode nicht immer?. 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