Go 并没有关键字 enum 来定义枚举类型,引入枚举的标准方法是声明一个自定义类型和一个使用了自增器 iota 的 const 组来表示枚举值。

预先声明的标识符 iota 表示连续的非类型化整数常量,它的值是对应常量的下标(从零开始),它可用于构造一组相关常数:

type ByteSize float64

const (
    _           = iota // ignore first value by assigning to blank identifier
    KB ByteSize = 1 << (10 * iota)
    MB
    GB
    TB
    PB
    EB
    ZB
    YB
)

由于第一个值从 0 开始,如果需要使第一个值为有意义的值,我们应该从 1 开始。

// Bad
type Operation int

const (
  Add Operation = iota
  Subtract
  Multiply
)
// Add=0, Subtract=1, Multiply=2

// Good
type Operation int

const (
  Add Operation = iota + 1
  Subtract
  Multiply
)
// Add=1, Subtract=2, Multiply=3

当然,凡事无绝对。如果第一个枚举值为零是有意义的,如当零值是理想的默认行为时。

type LogOutput int

const (
  LogToStdout LogOutput = iota
  LogToFile
  LogToRemote
)
// LogToStdout=0, LogToFile=1, LogToRemote=2
powered by Gitbook该文章修订时间: 2024-03-22 15:30:00

results matching ""

    No results matching ""