Golang中的常量方法是什么?

7

在Golang中,经常需要声明一个指针类型的关联方法,因为你不想复制一个巨大的结构体:

func (a *HugeStructType) AMethod() {
    ....
}

在C++中,如果我想要创建这样一个方法,但是保证不改变底层结构体的值,我会将其声明为const

class HugeStructType {
    public:
        void AMethod() const
        ...
}

在golang中有相应的方法吗?如果没有,是否有一种惯用的方法来创建与指针类型相关联的方法,而这种方法已知不会改变底层结构?

2个回答

15

没有。

另外,你的观点“因为你不想复制一个巨大的结构体”通常是错误的。很难想出真正如此庞大的结构体,即在方法调用期间进行复制是应用程序瓶颈(请记住,切片和映射很小)。

如果你不想改变你的结构体(当你考虑到例如映射或指针字段时,这是一个复杂的概念),那就不要这样做。或者复制一份。如果你担心性能问题:测量一下。


2

如果您想确保不更改方法的目标,您必须声明它不是指针。

    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}

1
这不是 OP 所问的,因为这不是 C 中 const 限定符的“等价物”。OP问题的确切答案就是“不”。 - Zhe
@Zhe,你的说法在技术上可能是准确的,但我更想要帮助别人而不是纠结于细节。 - ijt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接