Go 有没有一种方法可以迭代用作枚举的常量

Go 有没有一种方法可以迭代用作枚举的常量,go,enums,Go,Enums,我正在尝试在golang中使用enum,如下所示。我正在努力找到一种简单的方法来迭代常量值列表。golang的常见做法是迭代用作枚举的常量值。谢谢 type DayOfWeek int const( Monday DayOfWeek = iota Tuesday Wednesday Thursday Friday Saturday Sunday ) 在Java中,我们可以如下迭代 pu

我正在尝试在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
}

在运行时没有直接的方法来枚举命名类型的值/实例,无论是变量还是常量,除非您专门定义一个列出它们的切片。这由枚举类型的定义者或用户决定

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小组讨论了这一点,讨论了从包(包常量定义的超集)导出的名称和函数


当且仅当程序引用该列表时,该语言才有可能在编译时包含生成该列表的语法糖。但是,迭代顺序应该是什么?如果你的一周从星期一开始,我定义的清单就没有多大帮助;您必须定义自己的切片范围,从周一到周日。

首先,所有Go标识符通常都在中,包括常量。您可以执行一个简单的循环,例如d:=Monday的
;顺便说一句,从
时间.星期天
时间.星期六
已经有了。(当然,你只是碰巧把一周中的几天作为一个武断的例子,这并不重要)。戴夫,谢谢你的回复。我纠正了常数的情况。我看的是一般的枚举,而不仅仅是工作日。第一天和最后一天对我来说似乎很有趣。这应该包含在常量列表中,还是它们是外部变量?谢谢@DaveC:您的评论可以作为我需要可编辑的枚举的答案,我通常会添加一个伪结束标记。以一周中的几天为例,我的代码将有类似于
for i:=Monday的循环;我记得昨天;i++{
。那样的话,如果地狱冻结了,我需要在一周中增加第8天,我只需要在
LastDay
(虚拟结束标记)之前推它。这是语言中的一种常见模式,这些语言不支持在枚举上迭代,比如C、Go等。