枚举将相关的常量组合成一个单一的类型。枚举是一个具有许多应用的强大功能。然而,与其他大多数编程语言相比,它们在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程序来创建一个枚举类,同时还有一些例子。我们创建了各种函数来实现创建枚举类的逻辑。