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()
方法,使常量输出为字符串。
文章来源于网络,侵删!