Golang程序 创建一个枚举类

枚举将相关的常量组合成一个单一的类型。枚举是一个具有许多应用的强大功能。然而,与其他大多数编程语言相比,它们在Go中的实现方式非常不同。在这篇文章中,我们将看到如何在Golang中使用预先声明的可识别的iota来实现枚举。

IOTA - Iota是一种标识符,与常量一起使用,可以使基于数字的自动递增常量定义更加简单。关键字 “iota “代表一个以零开始的整数常量。

实现Iota

package main
import "fmt"
const (
   c0 = iota + 1
   c1
   c2
)
func main() {
   fmt.Println(c0, c1, c2) // Print : 1 2 3
}

输出

1 2 3

为工作日创建一个枚举

算法

第1步 --导入fmt包,它允许我们在屏幕上打印任何东西。

第2步 --创建一个新的数据类型为Weekday,用于存储工作日的整数类型。

第 3 步–声明每个工作日的相关常数,从索引1开始。

第 4 步–创建一个函数,从提供的整数值中获得作为字符串的工作日。

第 5 步–创建一个函数来获取枚举的索引。

第6 步–调用main()函数。

第 7 步–初始化一个工作日类型,并在其中存储一个日期。

第 8 步 – 通过调用getWeekday()和getIndex()函数分别打印相应的工作日和索引。

例子

在下面的例子中,我们正在为工作日创建枚举。

package main
import "fmt"
type Weekday int

// Declaring related constants for each weekday starting with index 1
const (
   Sunday Weekday = iota + 1
   Monday
   Tuesday
   Wednesday
   Thursday
   Friday
   Saturday
)

// creating a function to get the weekday as string from the integer values provided
func (w Weekday) getWeekday() string{
   return [...]string{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
   "Saturday"} [w-1]
}

// creating a function to get the index of the enum
func (w Weekday) getIndex() int {
   return int(w)
}
func main() {
   var weekday = Sunday
   fmt.Println(weekday)
   fmt.Println(weekday.getWeekday())
   fmt.Println(weekday.getIndex())
}

输出

1
Sunday
1

为方向创建一个枚举

算法

第1步 - 导入fmt包,它允许我们打印任何东西。

第2步 - 创建一个新的类型Direction来存储方向的整数类型,从1-7开始。

第 3步 - 将每个方向的常量声明为Direction,并以iota作为常量集合的索引。请注意,第一个方向即北面的索引为iota+1即1,而后面的方向将获得自动递增的索引值。

第4步 - 现在我们需要为方向类型创建函数。第一个函数以字符串形式返回方向,我们将这个函数命名为getDirection()。而另一个函数返回枚举索引的整数值,我们将这个函数命名为getIndex()。

第5步 - 现在调用main()函数,这是程序的主要起点,程序从这里开始执行。

第 6步 - 创建一个新的方向类型的变量,并将其中的一个方向作为值存储在其中。

第 7 步 – 现在我们可以通过调用getDirection()和getIndex()函数分别打印方向和与该方向相对应的枚举索引。

第8步 - 通过使用fmt.Println()函数在屏幕上打印该函数返回的结果。

例子

在下面的例子中,我们正在为方向创建一个枚举

package main
import "fmt"

// creating a new custom type Direction to store the direction values as integers from 1-4
type Direction int

// Declaring related constants for each direction starting with index 1
const (
   North Direction = iota + 1
   East
   South
   West
)

// creating a function to get the directions as string from the integer values provided
func (d Direction) getDirection() string {
   return [...]string{"North", "East", "South", "West"}[d-1]
}
func (d Direction) getIndex() int {
   return int(d)
}
func main() {
   var d Direction = West
   fmt.Println(d)
   fmt.Println(d.getDirection())
   fmt.Println(d.getIndex())
}

输出

4
West
4

总结

我们已经成功地编译并执行了一个golang程序来创建一个枚举类,同时还有一些例子。我们创建了各种函数来实现创建枚举类的逻辑。