golang中的iota

171 阅读1分钟

iota介绍

iota是Go语言中的一个预定义标识符,用于在常量声明中创建连续的枚举值。它在常量声明中的每一行都会自动递增; 当你在常量声明中使用iota时,它的初始值为0,然后每遇到一个新的常量声明,iota的值就会递增1。这使得在一组相关常量中定义连续的枚举值变得非常方便。

使用示例

package main

import "fmt"

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

func main() {
    fmt.Printf("Monday: %d\n", Monday)
    fmt.Printf("Tuesday: %d\n", Tuesday)
    fmt.Printf("Wednesday: %d\n", Wednesday)
    fmt.Printf("Thursday: %d\n", Thursday)
    fmt.Printf("Friday: %d\n", Friday)
    fmt.Printf("Saturday: %d\n", Saturday)
    fmt.Printf("Sunday: %d\n", Sunday)
}


常见用法

iota和<<结合使用,<<在golang中标识左移运算,a << b标识把a的二进制值左移两位,即a*2^b

示例代码

const (
    _ = iota // skip the default value 0
    K = 1 << (10 * itoa) // 1024
    M = 1 << (10 * itoa) // 1048576
)

对于每个常量块,iota是独立的

package main

import "fmt"
const (
    A = iota // 0
    _
    B = iota // 2
    _
    C = iota // 4
)

const (
    D = iota // 0
    E = iota // 1
)

const (
    F = iota // 0
    G = 10
    H = iota // 2
)

func main() {
    fmt.Printf("A: %d\n", A)
    fmt.Printf("B: %d\n", B)
    fmt.Printf("C: %d\n", C)
    fmt.Printf("D: %d\n", D)
    fmt.Printf("E: %d\n", E)
    fmt.Printf("F: %d\n", F)
    fmt.Printf("H: %d\n", H)
}
//ouput
/**
A: 0
B: 2
C: 4
D: 0
E: 1
F: 0
H: 2
**/