Go语言学习指南:惯例模式与编程实践
上QQ阅读APP看书,第一时间看更新

2.3 const关键字

当学习新的编程语言时,我们都会和自己熟悉的特性做比较。比如,如何声明变量是不可变的?在Go语言中,我们使用关键字const,初探会发现它的使用方法几乎与其他语言一样。请在The Go Playground(https://oreil.ly/FdG-W)中查看示例2-3。

示例2-3:声明常量

运行以上代码,会看到下面的编译错误:

从上面的代码可以看出,常量就像使用var关键字一样,可以在包级声明,也可以在函数中声明,还可以在一组小括号内声明多个常量。

同时,const关键字也有一些规则约束。首先需要理解常量只是一个字面量命名(正如我们通过变量名使用变量一样)。编译的时候常量就已经被赋值了,这意味着可以使用以下方式给常量赋值:

  • 数字字面量
  • truefalse
  • 字符串
  • 字符
  • 内置函数complexrealimglencap
  • 包含预声明(内置)的值和运算符的表达式

 关于lencap函数的使用我们会在下一章学习。iota是Go中预声明(内置)的一个特殊的常量[1]。关于iota的深入学习详见第7章。

Go没有提供一种方法来指定在运行时计算的值是不可变的。在第3章,我们会看到Go中没有不可变的数组、切片、映射和结构体,也不能声明结构体中的某个字段是不可变的。在5.5节中,我们将会看到Go语言中,为了避免参数传递给函数的变量被修改,进行调用的时候都是以值传递的方式。

 Go中只有常量具有不可变性,变量是不能不可变的。


[1]iota被预声明为0,但是它的值在编译阶段并非恒定的。