枚举类型值从 1 开始

在 Go 中使用枚举的标准方法是声明一个自定义类型并通过 iota 关键字来声明一个 const 组。但是由于 Go 中变量的默认值都为该类型的零值,所以枚举变量的值应该从非零值开始。

BadGood
  1. type Operation int
  2. const (
  3. Add Operation = iota
  4. Subtract
  5. Multiply
  6. )
  7. // Add=0, Subtract=1, Multiply=2
  1. type Operation int
  2. const (
  3. Add Operation = iota + 1
  4. Subtract
  5. Multiply
  6. )
  7. // Add=1, Subtract=2, Multiply=3

在某些情况下,从零值开始也是可以的。例如,当零值是我们期望的默认行为时。

  1. type LogOutput int
  2. const (
  3. LogToStdout LogOutput = iota
  4. LogToFile
  5. LogToRemote
  6. )
  7. // LogToStdout=0, LogToFile=1, LogToRemote=2