Golang 创建枚举类
枚举将相关的常量组合成一个单一的类型。枚举是一个功能强大的特性,有许多应用。然而,与大多数其他编程语言相比,它们在Go中的实现方式非常不同。在本文中,我们将看到如何使用预声明的可识别的iota来在Golang中实现枚举。
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 - 初始化一个Weekday类型并将一个工作日存储在其中。
步骤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
创建一个Direction的枚举
步骤
步骤1 - 导入fmt包,使我们能够打印任何内容。
步骤2 - 创建一个新类型Direction,用于存储从1到7的整数类型的方向。
步骤3 - 为每个方向声明一个Direction常量,并使用iota对常量集进行索引。注意,第一个方向即北方的索引为iota + 1,即1,后续方向将以自动递增的值获得索引。
步骤4 - 现在我们需要为Direction类型创建函数。第一个函数返回方向作为字符串,我们将此函数命名为getDirection()。另一个函数返回枚举索引的整数值,我们将此函数命名为getIndex()。
步骤5 - 现在调用main()函数,这是程序的起始点,从这里开始执行程序。
步骤6 - 创建一个Direction类型的新变量,并将其中一个方向存储为值。
步骤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程序,用于创建一个枚举类,并提供了示例。我们创建了各种函数来实现创建枚举类的逻辑。