下面这段代码输出什么,说明原因。
package main
import "fmt"
func main() {
slice := []int{0, 1, 2, 3}
m := make(map[int]*int)
for key, val := range slice {
m[key] = &val
}
for k, v := range m {
fmt.Println(k, "->", *v)
}
}
Go1.22 版本之前
0 -> 3
1 -> 3
2 -> 3
3 -> 3
Go1.22 版本之后
0 -> 0
1 -> 1
2 -> 2
3 -> 3
Go1.22 之前 for range 循环的时候会key, val的地址是不会变化的,所以输出都是3