学习《GO语言学习笔记》的学习笔记之2.3 枚举(详解)

版权声明:诸葛老刘所有 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

猜你喜欢

转载自blog.csdn.net/weixin_39791387/article/details/86623619