第一个问题是怎么进去的。下面的代码显示,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