如何在 Go 中声明不可变变量?

Pab*_*hes 5 constants immutability go

我正在解决一些练习以进行围棋练习,并遇到了以下问题。

采取这个功能:

func foo(s string) {
    length := len(s);

    // Do something just reading from lenght
}
Run Code Online (Sandbox Code Playgroud)

在这里,由于使用其他语言编程,我的想法立即想到“长度不会被修改,因此应该将其标记为const”。

所以我这样做了:

const length = len(s);
Run Code Online (Sandbox Code Playgroud)

但它给了我以下错误:

const initializer len(s) is not a constant
Run Code Online (Sandbox Code Playgroud)

我想这是因为len(s)无法“在编译时”计算(不确定这对于 go 来说是否是 100% 正确)。

有什么办法表明length不应该修改吗?我在谷歌中搜索,但没有发现任何有用的东西。我对不可变结构有一些了解,但我认为它对于我想做的事情来说太复杂了。

Hym*_*sco 10

您不能将变量指定为不可变的。只有常量才有这个性质。

Go 中的常量也是编译时常量,这意味着您无法将其初始化为取决于某些变量的特定值的值,就像s您的示例中那样。

此外,除了极少数例外,函数不能返回常量。即使可以,它仍然必须是编译时常量。len 可以返回常量值,但前提是参数的大小恒定,例如字符串常量或数组类型(Go 中具有固定长度)。