这里对for循环中num的值讲解有点问题,对于go 1.22之前的版本这是适用的,但是1.22之后go改变了
之前的变量scope是基于整个loop的,但是现在的变量scope是基于每一次的iteration,
https://go.dev/blog/loopvar-preview
https://go.dev/wiki/CommonMistakes
nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
for _, num := range nums {
fmt.Printf("val: %d, addr: %p\n", num, &num)
num = num * 2
}
这段代码的结果可能是,num的地址并不一样
val: 1, addr: 0xc0000100a8
val: 2, addr: 0xc0000100c8
val: 3, addr: 0xc0000100e0
val: 4, addr: 0xc0000100e8
val: 5, addr: 0xc0000100f0
val: 6, addr: 0xc0000100f8
val: 7, addr: 0xc000010100
val: 8, addr: 0xc000010108
val: 9, addr: 0xc000010110
val: 10, addr: 0xc000010118