3 回答
TA贡献1852条经验 获得超1个赞
创建一个文件“ config.go”并创建要公开的变量。
不要导出它们(将它们全部变成小写)。而是创建func允许访问每个项目的public(大写)。
package config
var x = 10
func X() int {
return x
}
当您需要这些变量时,可以简单地import ./config在代码中使用它们,如下所示:
if config.X()
显然,您可以在package中设置变量init。
TA贡献1821条经验 获得超6个赞
这是一个非常好的问题,因为它深入研究了我怀疑可能是Go(不可变)状态所遗漏的内容。
来自语言参考,“常量表达式可能只包含常量操作数,并在编译时计算。”
您不能使vars恒定,这是一个遗憾。Joe的答案提出封装是一种解决方案,它将很好地工作-但它冗长,乏味并且可能会引入错误。
相比之下,许多不纯函数语言将可变变量与单分配不可变值结合在一起。例如,Scala具有关键字“ val”和“ var”;Scala的“ var”的含义与Go的“ var”非常相似。不变性是工具箱中的有用工具,因为可以编写有状态透明的过程代码以及参照透明的无副作用函数。两者都有自己的位置。不可变性也是并发的一种有价值的工具,因为如果在goroutine之间共享不可变值,则不必担心可能的竞争条件。
因此,在我看来,这是Go的缺点之一,这是Go的缺点之一。支持val和var可能并不难,区别在于编译器检查每个val是否被精确分配了一次。
在添加该功能之前,必须将封装作为唯一选择。
- 3 回答
- 0 关注
- 246 浏览
添加回答
举报