3 回答
TA贡献1796条经验 获得超7个赞
go 中的常量在编译时设置,请参阅此处文档中的相关部分:https : //golang.org/doc/effective_go.html#constants
Go 中的常量就是——常量。它们是在编译时创建的,即使在函数中定义为局部变量,并且只能是数字、字符(符文)、字符串或布尔值。由于编译时限制,定义它们的表达式必须是可由编译器计算的常量表达式。例如,1<<3 是一个常量表达式,而 math.Sin(math.Pi/4) 不是因为对 math.Sin 的函数调用需要在运行时发生。
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 反射更改属性的值。)
- 3 回答
- 0 关注
- 228 浏览
添加回答
举报