猿问

Golang 中的运行时常量

在某些语言中,例如 Java 和 C++,可以创建常量,然后在构造函数期间为其赋值(之后不能更改)。有没有办法在 Golang 中做到这一点,以便在创建运行时之前不知道其值的常量?提前致谢!


子衿沉夜
浏览 229回答 3
3回答

芜湖不芜

go 中的常量在编译时设置,请参阅此处文档中的相关部分:https&nbsp;:&nbsp;//golang.org/doc/effective_go.html#constantsGo 中的常量就是——常量。它们是在编译时创建的,即使在函数中定义为局部变量,并且只能是数字、字符(符文)、字符串或布尔值。由于编译时限制,定义它们的表达式必须是可由编译器计算的常量表达式。例如,1<<3 是一个常量表达式,而 math.Sin(math.Pi/4) 不是因为对 math.Sin 的函数调用需要在运行时发生。

慕少森

如前所述,Go 语言规范或 Go 运行时支持的 Go 中没有支持运行时常量的构造。您可以使用未导出的字段和“getter”方法模拟运行时常量,例如:package wrappertype Immutable struct {&nbsp; &nbsp; value int}func (i Immutable) Get() int { // You may choose between pointer or value receiver&nbsp; &nbsp; return i.value}func New(value int) Immutable {&nbsp; &nbsp; return Immutable{value}}您可以Immutable使用New()类似构造函数的函数创建 的值,并且包之外的任何人*wrapper都无法修改包装的int值 ( Immutable.value)。(*注意:没有人意味着没有人不接触 package unsafe,但这不算数。即使在 Java 中,您也可以final使用 Java 反射更改属性的值。)

慕无忌1623718

不,这是不可能的。常量只能保存编译时已知的字符串和数字。
随时随地看视频慕课网APP

相关分类

Go
我要回答