Go 1.22中fmt.Print与内置print循环变量地址行为差异原因问询
fmt.Print与内置print在Go 1.22循环变量特性中的行为差异问题
我发现fmt.Print和Go内置的print函数,在Go 1.22的For循环变量修复特性里表现不一样。
在Go 1.22中,当循环变量被闭包捕获或者被取地址时,每个循环迭代会为变量分配独立的内存空间,不再复用同一内存地址。
但实际测试中却出现了差异:使用fmt.Print打印循环变量地址时,每次迭代的地址都不同;而用内置print打印时,两次迭代的地址却完全相同。请问这是为什么?
package main import "fmt" func main() { for _, v := range []int{1, 2} { fmt.Print(&v) // 输出示例:[0x140000a0018, 0x140000a0030] } for _, v := range []int{1, 2} { print(&v) // 输出示例:[0x1400004a718, 0x1400004a718] // 预期:不同地址,实际:相同地址 } }
内容的提问来源于stack exchange,提问作者user23564428
相关产品推荐
相关产品推荐

