gpt4 book ai didi

Go 的值方法接收者 vs 指针方法接收者

转载 作者:IT王子 更新时间:2023-10-29 01:26:45 24 4
gpt4 key购买 nike

我读过 Go 之旅和 Effective Go,http://golang.org/doc/effective_go.html#pointers_vs_values ,但仍然很难理解何时使用值方法接收器而不是指针方法接收器在结构上定义方法。换句话说,什么时候会这样:

type ByteSlice []byte

func (slice ByteSlice) Append(data []byte) []byte {
}

比这个更可取?

func (p *ByteSlice) Append(data []byte) {
slice := *p
*p = slice
}

最佳答案

slice 是一个一开始并不总是很明显的地方。 Slice header 很小,因此复制它很便宜,底层数组通过指针引用,因此您可以使用值接收器操作 slice 的内容。您可以在 sort 包中看到这一点,其中可排序类型的方法是在没有指针的情况下定义的。

唯一需要对 slice 使用指针的情况是,如果您要操作 slice header ,这意味着更改长度或容量。对于 Append 方法,您需要:

func (p *ByteSlice) Append(data []byte) {
*p = append(*p, data...)
}

关于Go 的值方法接收者 vs 指针方法接收者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24960496/

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