在golang中,通常你想要声明一个与指针类型相关的方法,因为你不想复制一个巨大的结构:
func (a *HugeStructType) AMethod() {
....
}
在C ++中,当我想制作这样一个方法,但保证它不会改变底层结构时,我将其声明为const
:
class HugeStructType {
public:
void AMethod() const
...
}
golang中是否有相同的内容?如果没有,是否有一种惯用的方法来创建一个与指针类型相关的方法,该方法已知不会改变底层结构?
答案 0 :(得分:10)
没有。
另外你的论点是“因为你不想复制一个巨大的结构”,这经常是错误的。很难找到真正那么大的struct,在方法调用期间复制是应用程序的瓶颈(请记住切片和贴图很小)。
如果您不想改变您的结构(当您考虑例如地图或指针字段时这是一个复杂的概念):就是不要这样做。或者复制一份。如果您担心性能:测量。
答案 1 :(得分:0)
如果您想保证不更改方法的目标,则必须声明它不是指针。
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}