You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 12:57:10