我正在尝试在 Go 中复制 Java 枚举。我想定义一个枚举,然后对其进行迭代以进行一些验证。在java中是这样的
public enum Direction {
NORTH,
NORTHEAST,
EAST,
SOUTHEAST,
SOUTH,
SOUTHWEST,
WEST,
NORTHWEST
}
Run Code Online (Sandbox Code Playgroud)
我想迭代它,像这样:
for (Direction dir : Direction.values()) {
// do what you want
}
Run Code Online (Sandbox Code Playgroud)
在 Golang 中是否有类似的方法来实现这一点,我正在考虑使用结构,但我认为这不是最好的方法。
有任何想法吗?
Go 没有与 Java 的 Enums 等效的东西,但是iota当您想创建“类似枚举”的常量时,它通常会派上用场。
你的例子可能是这样描述的:
type Dir int
const (
NORTH Dir = iota
NORTHEAST
EAST
SOUTHEAST
SOUTH
SOUTHWEST
WEST
NORTHWEST
dirLimit // this will be the last Dir + 1
)
Run Code Online (Sandbox Code Playgroud)
然后遍历所有方向(在Go Playground上尝试):
for dir := Dir(0); dir < dirLimit; dir++ {
// do what you want
}
Run Code Online (Sandbox Code Playgroud)
另请参阅:Go Wiki:Iota
有关高级使用和技巧iota,请参阅以下答案: