Go 语言中代替枚举的办法

枚举类型用于声明一组命名的常量,当一个变量有几种可能的取值时,可以将它定义为枚举类型。在 Go 语言中,并没有提供枚举类型,但是枚举类型又是开发过程中非常重要的数据类型。因为它可以事先定义一组有效的值,可以有效地防止用户提交无效数据,抽象到业务场景中就是我们平时网页上遇到的下拉框,或者我们选择快递地址时的省市信息,均为枚举类型的用武之地。所以在 Go 语言中对常量进行了一定的扩展,使其可以完美地替代枚举类型。

 

1.常量中的iota

为了使常量可以更好地替代枚举类型,Go 语言提供了一个iota关键字。使用iota初始化常量,可以生成一组规则类似的常量,但是不用每个常量都写一遍表达式。在一个const()表达式中,从iota开始的常量会被置为0,向后每个常量的值为前一个常量的值加一

代码示例:

代码块
  • package main
  • 2
  • import (
  • 4        "fmt"
  • )
  • 6
  • type Weekday int //自定义一个星期类型,作为枚举类型
  • 8
  • 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:用的比较少,稍作了解即可

代码示例:

代码块
  • package main
  • 2
  • import (
  • 4          "fmt"
  • )
  • 6
  • type Weekday int //自定义一个星期类型,作为枚举类型
  • 8
  • 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()方法,使常量输出为字符串。

文章来源于网络,侵删!

相关新闻