首页 > 服务端语言 > Go 入门教程 > 17 Go 语言中代替枚举的办法

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,予以删除。
© 2023 PV138 · 站点地图 · 免责声明 · 联系我们 · 问题反馈