Go语言学习之旅02——常量与枚举

常量

首先需要强调:定义常量,Go语言常量不需要全部大写,因为在Go语言当中,大小写带有特殊含义

Go语言定义常量的关键字是const,可以显式地指名类型,也可以不指明,例如下:

1
2
3
4
5
6
7
func consts() {
const filename string = "abc.txt"
const a, b = 3, 4 // 不指名类型 类型不确定 可做各种类型
var c int
c = int(math.Sqrt(a*a + b*b)) // a和b都被视作float64类型
fmt.Println(c)
}

补充:声明常量自动推导类型,使用=而不是:=

枚举

Go语言中的枚举是通过一组常量实现的:

1
2
3
4
5
6
7
8
9
10
func enums() {
// 枚举类型,一组const,必须指定值
const (
cpp = 0
java = 1
python = 2
golang = 3
)
fmt.Println(cpp, java, python, golang)
}

上面的枚举类型的例子可以这样简化:

1
2
3
4
5
6
7
8
9
10
func enumsSimple() {
// 枚举类型,简化
const (
cpp = iota // 自增
java
python
golang
)
fmt.Println("枚举类型简化:", cpp, java, python, golang)
}

补充:iota是常量自动生成器,给常量赋值使用。从0开始,每行自动累加1;可以仅第一行写iota;如果是在同一行,值都为同一个值

补充:iota如果遇到下一个const,值重置为0

小练习

使用枚举类型的简化运算计算:打印字节单位b、kb、mb、gb、tb、pb的字节数

1
2
3
4
5
6
7
8
9
10
11
12
func execise() {
// 枚举类型,简化运算
const (
b = 1 << (10 * iota) // 自增,iota从0开始,1左移10即:1乘以(2的10次方)
kb // 1乘以(2的20次方)
mb
gb
tb
pb
)
fmt.Println("枚举类型的简化运算 练习", b, kb, mb, mb, gb, tb, pb)
}