购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3 使用const

许多编程语言都有声明不可变值的方法。在Go中,这是通过const关键字实现的。乍看之下,它似乎与其他语言中的常量声明完全相同。但Go的常量有其独特之处。你可以在The Go Playground( https://oreil.ly/FdG-W )上尝试示例2-4中的代码,或者在第2章仓库( https://oreil.ly/QxTTT )的 sample_code/const_declaration 目录中找到相关示例。

示例2-4:const声明

当你运行这段代码时,编译会失败并出现以下错误信息:

正如你所看到的,你可以在包级别或函数内部声明常量。就像使用var一样,你可以(而且应该)在一对括号内声明一组相关的常量。

需要注意的是,Go中的const(常量)使用有很大限制。Go的常量本质上是给字面量起名。常量只能存储编译期间可以确定的值。这意味着常量可以被赋予以下类型的值:

·数值字面量

·true与false

·字符串

·字符

·内置函数complex、real、imag、len和cap的返回值

·由运算符和上述已列举值组成的表达式

我将在第3章介绍len和cap函数。另一个可以在const声明中使用的值叫作iota。我会在第7章讨论创建自定义类型时详细讲解iota。

Go语言没有提供一种方法来指定在运行时计算的值为不可变。例如,以下代码将无法编译,并会产生错误:x+y(int 类型的值 )不是常量。

正如你将在下一章看到的,Go中没有不可变的数组、切片、映射或结构体,也没有办法声明结构体中的字段为不可变。这种限制实际上没有听起来那么严重。在函数内部,变量是否被修改是很明显的,因此不可变性的重要性相对较低。在5.5节,你将看到Go是如何防止修改作为参数传递给函数的变量的。

Go中的常量是一种给字面量命名的方法。Go中没有声明变量不可变的方法。 nmm4xXIHWMZ2CLMmaEMbKv/XD7g5s81WE5UEV2EhOlqltK9/xHwc1f1y/CoZz12n

点击中间区域
呼出菜单
上一章
目录
下一章
×