什么在常量
在Golang中,常量是指在编译期就已知且不可改变的值。
字面常量
在程序中硬编码的常量值被称为字面常量,如:
代码语言:javascript复制-12 // 整数类型常量
3.1415926 // 浮点类型常量
3.2 12i // 复数类型常量
true // 布尔类型常量
"foo" // 字符串常量
常量定义
使用关键字const
给常量指定一个友好的名字:
const pi float64 = 3.1415926 // 限定类型的常量
const zero = 0.0 // 无类型浮点常量
Golang中的常量定义可以限定类型,但不是必须的。如果定义常量时没有指定类型,那么它与字面常量一样,是无类型常量。
还可以同声明多个常量:
代码语言:javascript复制const {
size int64 = 1024
eof = -1
}
还可以进行常量的多重赋值:
代码语言:javascript复制const u, v float32 = 0, 3 // 常量的多重赋值,u = 0.0, v = 3.0
const a, b, c = 3, 4, "foo" // a = 3, b = 4, c = "foo"
常量的值也可以是一个在编译期运算的常量表达式:
代码语言:javascript复制const mask = 1 <<< 3 // mask = 8
但不能是在运行期才能得出结果的值,如下常量定义将编译报错。
代码语言:javascript复制const home = os.GetEnv("HOME")
预定义常量
Golang中预定义了这些常量:true
,false
和iota
。
iota
很特殊,可以认为是一个可被编译器修改的常量:在每一个const
关键字出现时被重置为0,然后在下一次const
出现之前,每出现一次iota
,其所代表的数字会自动加1。
const {
c0 = iota // c0 = 0
c1 = iota // c1 = 1
c2 = iota // c2 = 2
}
const {
a = 1 << iota // a = 1,iota所代表的数字被重置为0
b = 1 << iota // b = 2
c = 1 << iota // c = 4
}
const {
u = iota * 42 // u = 0,iota所代表的数字被重置为0
v = iota * 42 // v = 42
w = iota * 42 // 84
}
const x = iota // x = 0,iota所代表的数字被重置为0
const y = iota // y = 0,iota所代表的数字被重置为0
枚举
在const
关键字后使用一对圆括号的方式定义一组常量,这组常量就是Golang中的枚举。
const (
Sunday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
numberOfDays // 小写字母开头,这个常量没有导出,属于包私有的,只能在包内可见
)
只有以大写字母开头的枚举值对其他包可见,以小写字母开头的枚举值只能在包内可见。