Avatar ·

Ändern von Slice-Elementen während der Iteration in Go: Warum funktioniert es nicht und wie behebt man es?

Hallo zusammen! Ich habe gerade angefangen, Go zu lernen, und bin auf ein seltsames Verhalten gestoßen, wenn ich über einen Slice iteriere. Ich habe einen einfachen Code, bei dem ich jedes Element in einem Integer-Slice verdoppeln möchte: ```go package main import "fmt" func main() { nums := []int{1, 2, 3, 4, 5} for _, val := range nums { val = val * 2 } fmt.Println(nums) // Erwartet: [2, 4, 6, 8, 10], aber erhalte: [1, 2, 3, 4, 5] } ``` Ich erwartete, dass sich die Werte im Slice nach der Schleife ändern, aber sie blieben gleich. Ich habe überprüft – der Compiler gibt keine Fehler aus, der Code läuft, aber das Ergebnis ist nicht das erwartete. Warum passiert das? Ich dachte, dass `val` ein Verweis auf das Slice-Element ist, aber es scheint, dass das nicht der Fall ist. Wie ändert man Slice-Elemente während der Iteration richtig? Gibt es andere Möglichkeiten, außer den Index zu verwenden? Vielen Dank im Voraus für die Hilfe! <<>>

Problem: Kopieren des Werts bei der Iteration

In Go wird bei Verwendung der for range-Konstruktion die Variable val