为了账号安全,请及时绑定邮箱和手机立即绑定

我有一个关于包字节中 Go 指针使用的问题

我有一个关于包字节中 Go 指针使用的问题

Go
临摹微笑 2023-07-17 14:02:02
我有一个关于 Go 中指针用法的问题。链接在这里: https: //golang.org/pkg/bytes/#example_Buffer。在本type Buffer节中,第一个示例:type Buffer struct {    // contains filtered or unexported fields}func main() {    var b bytes.Buffer // A Buffer needs no initialization.    b.Write([]byte("Hello "))    fmt.Fprintf(&b, "world!")    b.WriteTo(os.Stdout)}然后在func (b *Buffer) Write(p []byte) (n int, err error)我知道 的 接收者func Write那么(b *Buffer)为什么在main()函数中,在声明/初始化之后b,我们可以简单地使用b.Write()但不能 (&b).Write()?谢谢你!
查看完整描述

1 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

接收者是一个指针,在b.Write()中,b是可寻址的。因此 Write 是在指向 b 的指针上调用的,而不是 b 的副本。如果 b 不可寻址,那么您将收到编译错误。例如,这会失败:

bytes.Buffer{}.Write([]byte{1})

一般来说:只有当您可以获取接收者对象的地址时,才可以使用指针接收者调用方法。编译器传递引用,而不是此类方法的副本。


查看完整回答
反对 回复 2023-07-17
  • 1 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信