美文网首页
Go Enum和iota

Go Enum和iota

作者: ShootHzj | 来源:发表于2021-07-01 21:43 被阅读0次

Golang没有内置的enum类型,通常都是用常量来模拟。如下例所示:

package enum1

import (
    "fmt"
    "testing"
)

type Hero int

const (
    IRONMAN   Hero = 0
    SPIDERMAN Hero = 1
    BATMAN    Hero = 2
)

func TestName(t *testing.T) {
    ironman := IRONMAN
    fmt.Println(ironman == SPIDERMAN)
    fmt.Println(ironman == IRONMAN)
}

输出为false、true。我们可以用iota这个go的语法糖来简化这个代码

import (
    "fmt"
    "testing"
)

type Hero int

const (
    IRONMAN   Hero = iota
    SPIDERMAN
    BATMAN
)

func TestName(t *testing.T) {
    ironman := IRONMAN
    fmt.Println(ironman == SPIDERMAN)
    fmt.Println(ironman == IRONMAN)
}

输出结果和上面一样。下面介绍一下iota的语法

  • iota的初始值为0
  • 每经过一个ConstSpec语句,iota会递增。在同一个ConstSpec中出现的iota的值一样。如 a, b = iota, iota,a和b的值相同。
  • 每当const关键字出现,iota会重置为0
const (
    // iota reset to 0
    // c0 = 0
    c0 = iota
    // c1 = 1
    c1 = iota
    // c2 = 2
    c2 = iota
)

const (
    // iota reset to 0
    // a = 1
    a = 1 << iota
    // b = 2
    b = 1 << iota
    // c = 4
    c = 1 << iota
)

const (
    // u = 0
    u = iota * 42
    // v = 42.0
    v float64 = iota * 42
    // w = 84
    w = iota * 42
)

const x = 0
const y = 0

// 在表达式列表中,每个iota的值都相同,iota仅仅在每个ConstSpec之后递增
const (
    bit0, mask0 = 1 << iota, 1<<iota - 1 // bit0 == 1, mask0 == 0
    bit1, mask1                          // bit1 == 2, mask1 == 1
    _, _                                 // skips iota == 2
    bit3, mask3                          // bit3 == 8, mask3 == 7
)

参考资料

https://stackoverflow.com/questions/14426366/what-is-an-idiomatic-way-of-representing-enums-in-go

相关文章

  • Go Enum和iota

    Golang没有内置的enum类型,通常都是用常量来模拟。如下例所示: 输出为false、true。我们可以用io...

  • Go枚举(一)

    go没有明确意义上的enum定义,不过可以借助iota标识符实现一组自增常量值来实现枚举类型。1.iota自增 输...

  • iota

    关于iota的说明文档:iota在go中的使用

  • iota

    iota go语言中不支持枚举定义,但是使用iota可以实现类似效果 枚举定义 iota实际被定义为0,仅配合co...

  • Golang整理

    iota iota是golang的一个关键字,此关键字用来声明enum的时候采用,默认从0开始,每遇到一个类似c...

  • golang学习笔记--iota

    go中的iota 1.iota只能在常量的表达式中使用、2.每次const出现时都会让iota初始化为03.用作枚...

  • 第01天(基本类型、流程控制)_02

    07_常量的使用.go 08_多个变量或常量定义.go 09_iota枚举.go 10_bool类型.go 11_...

  • 关于 iota 的使用

    在 Go 语言的 const 中,如果使用 iota,每新有一行 iota 都会自加一,但是注意观察下面的例子: ...

  • GO学习 iota

    第4天iota关键字 package main import "fmt" func main() { /* i...

  • 04-枚举常量

    Go语言枚举 c语言中的枚举 Go语言枚举 iota迭代器 Go语言输出函数 fmt.Printf("格式化字符串...

网友评论

      本文标题:Go Enum和iota

      本文链接:https://www.haomeiwen.com/subject/nsesultx.html