下面这段代码输出什么,说明原因。

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

Go在线运行

Go1.22 之前 for range 循环的时候会key, val的地址是不会变化的,所以输出都是3