在Go中迭代时修改切片元素:为什么不起作用以及如何修复?
大家好!我刚开始学习Go,在迭代切片时遇到了一个令人困惑的行为。
我有一个简单的代码,想要将整数切片中的每个元素翻倍:
```go
package main
import "fmt"
func main() {
nums := []int{1, 2, 3, 4, 5}
for _, val := range nums {
val = val * 2
}
fmt.Println(nums) // 期望:[2, 4, 6, 8, 10],但得到:[1, 2, 3, 4, 5]
}
```
我期望循环后切片中的值会改变,但它们保持不变。我检查了——编译器没有报错,代码可以运行,但结果不对。
为什么会这样?我以为`val`是对切片元素的引用,但看起来并非如此。如何在迭代时正确修改切片元素?除了使用索引之外,还有其他方法吗?
提前感谢您的帮助!
<<>>
问题:迭代时值的复制
在Go中使用for range结构时,变量val