常量定义
常量是在go
运行过程中不会被修改的量,常量数据类型只支持bool类型、数字类型、字符串类型。
定义格式如下:
// const identifier [type] = value
const a string = "abc" // 显式定义
const a = "abc" // 隐式定义
定义多个同类型的变量
const a, b string = "abc", "def"
const a, b = "abc", "def"
枚举
常量还可以用作枚举
const (
Monday = 0
Tuesday = 1
Wednesday = 2
Thurday = 3
Friday = 4
Saturday = 5
Sonday = 6
)
内置函数
常量可以用len
、unsafe.Sizeof
等函数计算表达式的值。常量表达式中,函数必须是内置函数,否则编译过不了。
const (
a = "123"
b = len(a)
c = unsafe.Sizeof(a)
)
iota
iota
是go
语言的常量计数器,只能在const
变量中使用,特性如下。
1、每次const出现,都会使iota初始化为0
const (
a = iota // 0
)
const (
b = iota // 0
c // 1
)
2、自定义类型
type NewInt int
const (
a NewInt = iota // 0
b = iota // 1
c // 2
)
3、可跳过的值
const (
a int = iota // 0
b = iota // 1
_
_
c // 4
)
4、位掩码表达式
const (
a NewInt = 1 << iota // 0
b // 2
_
_
c // 16
)
5、定义数量级
const (
_ = iota // ignore first value by assigning to blank identifier
KB ByteSize = 1 << (10 * iota) // 1 << (10*1)
MB // 1 << (10*2)
GB // 1 << (10*3)
TB // 1 << (10*4)
PB // 1 << (10*5)
EB // 1 << (10*6)
ZB // 1 << (10*7)
YB // 1 << (10*8)
)
6、中间插队
中间插队时,iota
会被覆盖掉不再继续自增
const (
a = iota //0
b //1
c //2
d = "ha" //独立值,iota += 1
e //"ha" iota += 1
f = 100 //iota +=1
g //100 iota +=1
h = iota //7,恢复计数
i //8
)
7、中间插队
iota
在下一行增长,同一行常量继续增长
const (
Apple, Banana = iota + 1, iota + 2 // 1,2 iota++, iota++
Cherimoya, Durian // 2,3 iota++
Elderberry, Fig // 3,4 iota++
Elderber, Figf // 4,5 iota++
)
优点:使用iota
能简化定义,在定义枚举时很有用。当代码需要改动的时候,也比较易于拓展或者修改;
缺点:不熟悉iota
的规则很容易理解错;
参考文档: