Go 语言中代替枚举的办法
枚举类型 用于声明一组命名的常量,当一个变量有几种可能的取值时,可以将它定义为 枚举类型 。在 Go 语言中,并没有提供 枚举类型 ,但是枚举类型又是开发过程中非常重要的数据类型。因为它可以事先定义一组 有效的值 ,可以有效地防止用户提交无效数据,抽象到业务场景中就是我们平时网页上遇到的 下拉框 ,或者我们选择快递地址时的 省市信息 ,均为枚举类型的用武之地。所以在 Go 语言中对常量进行了一定的 扩展 ,使其可以完美地替代枚举类型。
1.常量中的iota
为了使常量可以更好地替代枚举类型,Go 语言提供了一个iota
关键字。使用iota
初始化常量,可以生成一组规则类似的常量,但是不用每个常量都写一遍表达式。在一个const()
表达式中,从iota
开始的常量会被 置为0 ,向后每个常量的值为 前一个 常量的值 加一 。
代码示例:
package main
import (
"fmt"
)
type Weekday int //自定义一个星期类型,作为枚举类型
const (
Sun Weekday = iota
Mon
Tues
Wed
Thur
Fri
Sat
)
func main() {
fmt.Println("Sun :", Sun)
fmt.Println("Mon :", Mon)
fmt.Println("Tues:", Tues)
fmt.Println("Wed :", Wed)
fmt.Println("Thur:", Thur)
fmt.Println("Fri :", Fri)
fmt.Println("Sat :", Sat)
}
Tips :自定义数据类型会在Go语言拓展已有类型中详细介绍。这里可以简单地理解为定义了一个Weekday的枚举。
执行结果 :
2. 将枚举值转换为字符串
使用iota
是可以使用 Go 语言的常量代替枚举类型,但是由于输出值均为阿拉伯数字,给调试和辨识造成了一定的困难。为了解决这一问题,Go 语言还提供了使常量枚举值输出为字符串的办法。需要我们手动构造一个使用枚举类型输出字符串的方法。
Tips :用的比较少,稍作了解即可
代码示例:
package main
import (
"fmt"
)
type Weekday int //自定义一个星期类型,作为枚举类型
const (
Sun Weekday = iota
Mon
Tues
Wed
Thur
Fri
Sat
)
func (w Weekday) String() string {
switch w {
case Sun:
return "Sun"
case Mon:
return "Mon"
case Tues:
return "Tues"
case Wed:
return "Wed"
case Thur:
return "Thur"
case Fri:
return "Fri"
case Sat:
return "Sat"
}
//不存在的枚举类型就返回"N/A"
return "N/A"
}
func main() {
fmt.Println("Sun :", Sun)
fmt.Println("Mon :", Mon)
fmt.Println("Tues:", Tues)
fmt.Println("Wed :", Wed)
fmt.Println("Thur:", Thur)
fmt.Println("Fri :", Fri)
fmt.Println("Sat :", Sat)
}
执行结果 :
3. 小结
本文主要介绍了如何使用 Go 语言中的常量来代替枚举类型。主要有两个要点:
- 自定义 枚举类型 ,第一个常量使用
iota
来赋值。 - 手动构建
String()
方法,使常量输出为字符串。
本文来自互联网用户投稿,不拥有所有权,该文观点仅代表作者本人,不代表本站立场。
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,邮箱:80764001@qq.com,予以删除。
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,邮箱:80764001@qq.com,予以删除。