我正在尝试在golang中使用enum,如下所示。我正在努力寻找一种简单的方法来迭代常量值列表。 golang中常见的做法是迭代用作枚举的常量值。谢谢!
type DayOfWeek int
const(
Monday DayOfWeek = iota
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
)
在Java中,我们可以迭代如下。
public enum DayOfWeek {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
for (DayOfWeek day: DayOfWeek.values()) {
// code logic
}
答案 0 :(得分:15)
除非您专门定义列出它们的切片,否则没有直接的方法可以在运行时枚举命名类型的值/实例,无论是变量还是常量。这取决于定义者或枚举类型的用户。
package main
import (
"fmt"
"time"
)
var Weekdays = []time.Weekday{
time.Sunday,
time.Monday,
time.Tuesday,
time.Wednesday,
time.Thursday,
time.Friday,
time.Saturday,
}
func main() {
for _, day := range Weekdays {
fmt.Println(day)
}
}
为了能够在运行时动态生成此列表,例如通过反射,链接器必须保留所有包中定义的所有符号,就像Java一样。 golang-nuts小组讨论了这一点,涉及从包中导出的名称和函数,包的常量定义的超集。 https://groups.google.com/forum/#!topic/golang-nuts/M0ORoEU115o
当且仅当程序引用该语言时,该语言才有可能包含用于在编译时生成此列表的语法糖。但迭代顺序应该是什么?如果您的周从星期一开始,我定义的列表不是很有用;你必须定义自己的切片,范围从星期一到星期日。