枚举是由一组常量值组成的数据类型。实现方式就是借用iota。
- 声明一个新的自定义类型——整数类型;
- 声明相关常量——使用iota;
- 创建通用行为——给类型一个String函数;
- 创建额外的行为——给类型一个EnumIndex函数。
比如,为工作日创建一个枚举:
// Weekday - Custom type to hold value for weekday ranging from 1-7
type Weekday int
// Declare related constants for each weekday starting with index 1
const (
Sunday Weekday = iota + 1 // EnumIndex = 1
Monday // EnumIndex = 2
Tuesday // EnumIndex = 3
Wednesday // EnumIndex = 4
Thursday // EnumIndex = 5
Friday // EnumIndex = 6
Saturday // EnumIndex = 7
)
func (w Weekday) String() string {
return [...]string{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}[w-1]
}
func (w Weekday) EnumIndex() int {
return int(w)
}
func main() {
var weekday = Sunday
fmt.Println(weekday) // Print : Sunday
fmt.Println(weekday.String()) // Print : Sunday
fmt.Println(weekday.EnumIndex()) // Print : 1
}