为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 中的运行时常量

Golang 中的运行时常量

Go
子衿沉夜 2021-12-07 16:10:34
在某些语言中,例如 Java 和 C++,可以创建常量,然后在构造函数期间为其赋值(之后不能更改)。有没有办法在 Golang 中做到这一点,以便在创建运行时之前不知道其值的常量?提前致谢!
查看完整描述

3 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

go 中的常量在编译时设置,请参阅此处文档中的相关部分:https : //golang.org/doc/effective_go.html#constants

Go 中的常量就是——常量。它们是在编译时创建的,即使在函数中定义为局部变量,并且只能是数字、字符(符文)、字符串或布尔值。由于编译时限制,定义它们的表达式必须是可由编译器计算的常量表达式。例如,1<<3 是一个常量表达式,而 math.Sin(math.Pi/4) 不是因为对 math.Sin 的函数调用需要在运行时发生。


查看完整回答
反对 回复 2021-12-07
?
慕少森

TA贡献2019条经验 获得超9个赞

如前所述,Go 语言规范或 Go 运行时支持的 Go 中没有支持运行时常量的构造。


您可以使用未导出的字段和“getter”方法模拟运行时常量,例如:


package wrapper


type Immutable struct {

    value int

}


func (i Immutable) Get() int { // You may choose between pointer or value receiver

    return i.value

}


func New(value int) Immutable {

    return Immutable{value}

}

您可以Immutable使用New()类似构造函数的函数创建 的值,并且包之外的任何人*wrapper都无法修改包装的int值 ( Immutable.value)。


(*注意:没有人意味着没有人不接触 package unsafe,但这不算数。即使在 Java 中,您也可以final使用 Java 反射更改属性的值。)


查看完整回答
反对 回复 2021-12-07
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

不,这是不可能的。常量只能保存编译时已知的字符串和数字。


查看完整回答
反对 回复 2021-12-07
  • 3 回答
  • 0 关注
  • 228 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信