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

为何将&符号传入fmt.Print无法打印bytes.Buffer变量的地址?

问题解答

核心原因:fmt包的接口适配逻辑

Go的fmt.Print系列函数会根据参数类型做特殊处理:当参数实现了fmt.Stringer或io.WriterTo接口时,会优先调用对应方法生成输出,而非直接打印指针地址或默认格式。

bytes.Buffer的指针类型*bytes.Buffer同时实现了这两个接口:

  • String()方法返回缓冲区的字符串内容
  • WriteTo()方法直接将缓冲区内容写入输出流

所以当你传入&temp_buff时,fmt.Print会自动调用这些接口方法,输出缓冲区里的文本,而不是指针地址。

如何打印指针地址

如果确实要输出temp_buff的地址,用格式化输出明确指定即可:

fmt.Printf("%p", &temp_buff)

这样就能得到变量的内存地址,比如0xc000010280这类格式。

额外说明

你用fmt.Fprintf(&temp_buff, ...)时必须传指针,是因为Fprintf要求参数实现io.Writer接口,而只有*bytes.Buffer实现了这个接口;但fmt.Print的参数是任意类型,这里的指针触发了接口适配逻辑,才导致输出内容而非地址。

内容的提问来源于stack exchange,提问作者Тимур Имашев

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:32:43