gpt4 book ai didi

go - 我对包字节中的 Go 指针用法有疑问

转载 作者:数据小太阳 更新时间:2023-10-29 03:40:19 25 4
gpt4 key购买 nike

我有一个关于 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()?

谢谢!

最佳答案

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

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

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

关于go - 我对包字节中的 Go 指针用法有疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57584905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com