版权声明:诸葛老刘所有 https://blog.csdn.net/weixin_39791387/article/details/86623619
本文适合初学者阅读
- Go 没有明确意义上的enum定义 不过可以借助iota标识符实现一组自增常量值来实现枚举类型.
const (
x = iota // 0
y // 1
z //2
)
const (
_ = iota //0
KB = 1 <<(10**iota) //1 << (10 * 1)
MB //1 << (10 * 2)
GB //1 << (10 * 3)
)
- 自增作用的范围为常量组.可在多个常量定义中使用多个
iota
, 它们各自单独计数, 只须确保组中每行常量的列数量相同即可. - 如果中断
iota
自增,则必须显式恢复.且后续自增按行序递增 - 自增默认类型为int, 可显式指定类型
- 在实际编码中,建议用自定义类型实现用途明确的枚举类型. 但这并不能将取值范围限定在预定义的枚举值内
package main
import (
"fmt"
)
type color byte
const (
black color = iota
red
blue
)
func test(c color) {
fmt.Println(c)
}
func main() {
test(red)
test(100) // 100 并未超出color/byte类型的取值范围
// x := 2
// test(x) // 运行时报错: cannot use x (type int) as type color in argument to test
}
- 常量具有’只读’属性,会被编译器在预处理阶段直接展开, 作为指令数据使用.
- 数字常量不会分配存储空间,无须像变量那样通过内存寻址来取值
END