<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
}

 

posted @ 2020-04-08 17:19  Wshile  阅读(262)  评论(0编辑  收藏  举报