
2.4 常量
Go语言的常量是一个简单值的标识符,在Go程序运行期间不会被修改。常量中的数据类型只可以是布尔类型、数值类型和字符串类型。Go语言中常量的声明语法为:
const 常量名 [数据类型] = 常量值
常量声明的关键词为const,后面跟着常量名(标识符),其中的数据类型是可选的,但值不能省略。Go编译器可以根据常量的值来推断它的数据类型。常量声明有显式声明和隐式声明之分:
· 显式声明:const myConst string = "hello"。
· 隐式声明:const myConst = "hello"。
另外,我们可以在一行语句中同时声明多个同类型的常量,语法如下:
const 常量名1, 常量名2,...,常量名n= 常量值1,常量值2,...,常量值n
下面是一个常量基本用法的示例程序2-11。
示例程序2-11 常量基本用法:chapter02\code07\const.go

在示例程序2-11中,第05行显式声明了一个标识符为ver的常量,其值为"1.0.0"。06行隐式声明了一个标识符为author的常量,其值为"jackwang"。第08行同时声明了两个常量a和b,这种声明和赋值方式可以简化代码量。第10~13行的常量用法往往用来模拟枚举类型。
注意
在Go语言中,常量声明后可以不使用,编译器不会因此而报错。
Go语言并没有提供枚举类型,但是可以使用const来模拟枚举类型。在正式模拟枚举类型之前,我们先介绍Go语言的自定义类型,其语法为:
type 自定义类型名 类型
下面是用常量模拟枚举类型的示例程序2-12。
示例程序2-12 用常量模拟枚举类型:chapter02\code07\enum.go

在示例程序2-12中,第05行用type SEX int8自定义了一个SEX类型。SEX类型是基于int8类型的,因此可以存储int8数据。第06~11行用const定义了两个SEX类型的常量MAN和FEMALE。第13行const sex = MAN语句定义了一个SEX类型的常量sex,其值为常量值(枚举值)MAN。第15行打印输出sex的类型时会输出类型main.SEX。
在Go语言中,常量可以在函数外进行声明,声明的时候必须要指定常量的值,否则会报错。
注意
在Go语言中,用常量可以模拟枚举类型,但是还不是真正的枚举类型,例如可以给SEX类型的变量赋值2,而不是必须为MAN或者FEMALE。
在Go语言中,还有一种特殊常量iota,可以认为是一个可以被编译器修改值的常量。iota在const关键字出现时将被重置为0,并在后续每新增一行常量声明时使iota计数加1。