<3>Golang基础进阶——常量和枚举
Golang:常量和枚举
常量—恒定不变的量
相对于变量,常量是恒定不变的值,例如圆周率。
常量表示:
const pi = 3.1415
const e = 2.7123
常量 明和变量声明非常 似,只是把 var 换成了 const
多常量声明:
const (
pi = 3.1415
e = 2.7123
)
常量在编译期确定,所以可以用于数组声明:
const size = 4
var arr [size]int
枚举—一组常量值
一般情况下一组常量附带空变量
func enum2() {
const (
python = 0
java
golang = 1
php
)
fmt.Println(python, java, golang, php)
}
func main() {
enum2()
// 0 0 1 1
}
Go语言中现阶段没有枚举,可以使用常量配合 iota 模拟枚举。
type Weapon int
const (
Arrow Weapon = iota
Shuriken
SnoperRifle
FileN
NameN
)
func main() {
fmt.Println(Arrow, Shuriken, SnoperRifle,FileN,NameN) // 0 1 2 3 4
var weapon Weapon = NameN
fmt.Println(weapon) // 4
}
Array常量的类型标识为 Weapon 这样标识后,const下方的常量可是默认类型的,默认时默认使用前面指定 类型作为常量类型。该行使用iota进行常量值自动生成。iota起始值为0,一般情况下也是建议枚举从0开始,让每个枚举类型都有一个空值,方便业务和逻辑的灵活使用。
示例:标志位常量
const (
FlagNone = 1 << iota // 1*2^0
FlagRed // 1*2^1
FlagGreen // 1*2^2
FlagBlue // 1*2^3
)
func main() {
fmt.Printf("%d %d %d\n", FlagRed, FlagGreen,FlagBlue)
fmt.Printf("%b %b %b\n", FlagRed, FlagGreen, FlagBlue)
//2 4 8
//10 100 1000
}
面试小题:
func main() {
const (
a = iota
b
c
d = 8
e = 8
f = iota
g
)
fmt.Println(a, b, c, d, e, f, g)
// 输出结果:0 1 2 8 8 5 6
const(
x = iota
y
)
fmt.Println(x, y)
// 输出结果:0 1
}
加油,你们是最棒的!