在 golang 中,通常你想声明一个指针类型关联的方法,因为你不想复制一个巨大的结构体:func (a *HugeStructType) AMethod() { ....}在 C++ 中,当我想创建这样一个方法,但保证它不会改变底层结构时,我声明了它const:class HugeStructType { public: void AMethod() const ...}golang 中是否有等价物?如果没有,是否有一种惯用的方法来创建已知不会改变底层结构的指针类型关联方法?
2 回答
拉风的咖菲猫
TA贡献1995条经验 获得超2个赞
不,那里没有。
另外你的论点“因为你不想复制一个巨大的结构”经常是错误的。很难想出真正那么大的结构,方法调用期间的副本是应用程序瓶颈(请记住,切片和映射很小)。
如果您不想改变您的结构(当您考虑例如映射或指针字段时,这是一个复杂的概念):不要这样做。或者复印一份。如果您担心性能:衡量。
慕神8447489
TA贡献1780条经验 获得超1个赞
如果你想保证不改变方法的目标,你必须声明它不是一个指针。
package main
import (
"fmt"
)
type Walrus struct {
Kukukachoo int
}
func (w Walrus) foofookachu() {
w.Kukukachoo++
}
func main() {
w := Walrus { 3 }
fmt.Println(w)
w.foofookachu()
fmt.Println(w)
}
===
{3}
{3}
- 2 回答
- 0 关注
- 238 浏览
添加回答
举报
0/150
提交
取消