在做项目的时候遇到了如下的用法,一开始不太理解什么意思,后来记起来了Go语言中含有一个语法糖iota。
1. iota是Go语言中的计数器,它只能在常量表法式中使用。并且只能用于int类型的常量。
a := iota // 编译错误,只能在常量表达式中使用
2. iota是一个计数器,iota可以将常量初始化为0,在第一个常量后面加上iota,则后序的常量默认递增,使用iota可以简化定义,在常量递增的情况下很有用。
const num = iota // num = 0
const (
a = iota // a = 0
b // b = 1
c // c = 2
d // d = 3
)
const (
upsertPolicy = iota // upsertPolicy = 0
insertPolicy // insertPolicy = 1
updatePolicy // updatePolicy = 2
)
3. 也可以自定义类型,但是要保证类型式int类型
type newInt int
const (
f newInt = iota // f = 0
i // i = 1
j // j = 2
)
4. 可以通过下划线跳过不想要的值
const (
m = iota // m = 0
_
_
n // n = 3
)
5. 可以表示左移和右移动
const (
y = 2 >> iota // y = 2,y右移0位
x // x = 1,x右移1位
)
const (
_ = iota
l = 1 << iota // l = 2,l左移1位
h // h = 4,h左移2位
)
6. 同理可以定义数量级
const (
_ = iota
KB = 1 << (10 * iota) // KB = 1024,表示1向左移动10*1位
MB // MB = 1024*1024,表示向左移动10*2位
)
7.iota以行位单位,同一行的iota数值一样
const (
t, r = iota + 1, iota + 2 // t = 1,r = 2 (iota = 0)
v, u // v = 2,u = 3 (iota = 1)
p, q // p = 3,q = 4 (iota = 2)
)
8.iota可以实现插队,中间有别的常量会打断iota的递增,要想实现插队则在别的变量后面在加入iota
const (
frist = iota // frist = 0
sencond = 5
thr = iota // thrid = 2
last // last = 3
)