golang的常量是一种非常特殊的类型,与其他语言区别挺大,在定义的时候不需要指定类型,如下:
在使用时,num可以赋值给float等类型
const (
s = "abc"
num = 2
)
func main() {
var a float = num
fmt.Println(a)
fmt.Printf("%T,%T",s,num)
}
在常量之后加入iota,成为自增常量,iota是一个与常量位置相等的值,并且是可以参与运算的,例子
const (
s = 2
p
num = iota
_
g
m
)
func main() {
fmt.Println(s,p)
fmt.Println(num,g,m)
}
输出:
2 2
2 4 5
看下在go源码中的应用
const (
mutexLocked = 1 << iota // mutex is locked
mutexWoken
mutexStarving
mutexWaiterShift = iota
)
结果:
1
2
4
3