第一个问题是怎么进去的。下面的代码显示,n在每个迭代中具有相同的地址。我知道这样一个for循环被一些人称为value semantic,实际范围是片的副本,而不是实际片本身。为什么每次迭代中的n都有相同的地址?这是因为片中的每个元素都被复制了,而不是整个片被预先复制了一次。如果只复制原始片中的每个元素,那么在每次迭代中可以重用单个内存地址?

package main

import (
    "fmt"
)

func main() {
    numbers := []int{1, 2}
    for i, n := range numbers {
        fmt.Println(&n, &numbers[i])
    }
}

go playground的示例结果:

0xc000122030 0xc000122020
0xc000122030 0xc000122028