Go 语言中代替枚举的办法
枚举类型用于声明一组命名的常量,当一个变量有几种可能的取值时,可以将它定义为枚举类型。在 Go 语言中,并没有提供枚举类型,但是枚举类型又是开发过程中非常重要的数据类型。因为它可以事先定义一组有效的值,可以有效地防止用户提交无效数据,抽象到业务场景中就是我们平时网页上遇到的下拉框,或者我们选择快递地址时的省市信息,均为枚举类型的用武之地。所以在 Go 语言中对常量进行了一定的扩展,使其可以完美地替代枚举类型。
1.常量中的iota
为了使常量可以更好地替代枚举类型,Go 语言提供了一个iota关键字。使用iota初始化常量,可以生成一组规则类似的常量,但是不用每个常量都写一遍表达式。在一个const()表达式中,从iota开始的常量会被置为0,向后每个常量的值为前一个常量的值加一。
代码示例:
代码块
- 1
package main - 2
- 3
import ( - 4
"fmt" - 5
) - 6
- 7
type Weekday int //自定义一个星期类型,作为枚举类型 - 8
- 9
const ( - 10
Sun Weekday = iota - 11
Mon - 12
Tues - 13
Wed - 14
Thur - 15
Fri - 16
Sat - 17
) - 18
- 19
func main() { - 20
fmt.Println("Sun :", Sun) - 21
fmt.Println("Mon :", Mon) - 22
fmt.Println("Tues:", Tues) - 23
fmt.Println("Wed :", Wed) - 24
fmt.Println("Thur:", Thur) - 25
fmt.Println("Fri :", Fri) - 26
fmt.Println("Sat :", Sat) - 27
}
Tips:自定义数据类型会在Go语言拓展已有类型中详细介绍。这里可以简单地理解为定义了一个Weekday的枚举。
执行结果:

2. 将枚举值转换为字符串
使用iota是可以使用 Go 语言的常量代替枚举类型,但是由于输出值均为阿拉伯数字,给调试和辨识造成了一定的困难。为了解决这一问题,Go 语言还提供了使常量枚举值输出为字符串的办法。需要我们手动构造一个使用枚举类型输出字符串的方法。
Tips:用的比较少,稍作了解即可
代码示例:
代码块
- 1
package main - 2
- 3
import ( - 4
"fmt" - 5
) - 6
- 7
type Weekday int //自定义一个星期类型,作为枚举类型 - 8
- 9
const ( - 10
Sun Weekday = iota - 11
Mon - 12
Tues - 13
Wed - 14
Thur - 15
Fri - 16
Sat - 17
) - 18
- 19
func (w Weekday) String() string { - 20
switch w { - 21
case Sun: - 22
return "Sun" - 23
case Mon: - 24
return "Mon" - 25
case Tues: - 26
return "Tues" - 27
case Wed: - 28
return "Wed" - 29
case Thur: - 30
return "Thur" - 31
case Fri: - 32
return "Fri" - 33
case Sat: - 34
return "Sat" - 35
} - 36
//不存在的枚举类型就返回"N/A" - 37
return "N/A" - 38
} - 39
- 40
func main() { - 41
fmt.Println("Sun :", Sun) - 42
fmt.Println("Mon :", Mon) - 43
fmt.Println("Tues:", Tues) - 44
fmt.Println("Wed :", Wed) - 45
fmt.Println("Thur:", Thur) - 46
fmt.Println("Sat :", Fri) - 47
fmt.Println("Sat :", Sat) - 48
}
执行结果:

3. 小结
本文主要介绍了如何使用 Go 语言中的常量来代替枚举类型。主要有两个要点:
- 自定义枚举类型,第一个常量使用
iota来赋值。 - 手动构建
String()方法,使常量输出为字符串。
文章来源于网络,侵删!
