Golang 常量使用iota

基本概念

  • iota是Go语言的常量计数器,只能在常量的表达式中使用。
  • iota默认值为0,在且仅在const关键字出现时将被重置为0。
  • const中每新增一行常量声明将使iota计数一次(iota可理解为const语句块中的行索引)。
  • 使用iota能简化定义,在定义枚举时很有用。
  • const: 分组声明时,第一个常量必须设置值。第二个及后续的常量未设置值时,将被默认设置为他前面那个常量的表达式。如果那个常量的值为iota,则它也被设置为iota。

示例

iota只能在常量的表达式中使用

   fmt.Println(iota) 
  // 编译错误: undefined: iota

iota从0开始,每新增一行计数加一

const (
    Sunday    = iota // 0
    Monday           // 1
    Tuesday          // 2
    Wednesday        // 3
    Thursday         // 4
    Friday           // 5
    Saturday         // 6
)

在const关键字出现时被重置为0

    const a = iota // a = 0

    const (
        b = iota // b = 0
        c        // c = 1   相当于c = iota
        d = iota // d = 2  在同一个const中,d=iota不会重置计数器
        e        // e = 3 
    )


表达式

type ByteSize float64

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)
)

一行定义多个常量
iota 在下一行增长,而不是本行立即取得它的引用。

const (
    // iota = 0
    // Apple = iota + 1 = 1
    // Banana = iota + 2 = 2
    Apple, Banana = iota + 1, iota + 2
    // iota = 1
    //  Cherimoya = iota + 1 = 2
    //  Durian = iota + 2 = 3
    Cherimoya, Durian
    // iota = 2
    //  Elderberry = iota + 1 = 3
    //  Fit = iota + 2 = 4
    Elderberry, Fig
)

中间插队
同一个const中,中间插队不会打乱iota计数器。

const (
    h = iota // 0
    i = 100  // 100
    j        // 100, 延续上一个表达式
    k = iota // 3, iota可理解为行索引,此时计数为3
    l        // 4
)

跳过值
在新行使用 _ ,跳过一次计数。

type Color float64

const (
    RED    Color = iota // 0
    ORANGE              // 1
    YELLOW              // 2
    GREEN               // 3
    _
    _
    BLUE   // 6
    INDIGO // 7
    VIOLET // 8
)

你可能感兴趣的:(Golang 常量使用iota)