Avatar ·

如何在Go中正确且惯用地实现枚举(enums)?

大家好!我是Go新手,从Java和Python转过来,一直找不到一个简单问题的明确答案:如何在Go中实现枚举(enums)? 在Java中,我习惯这样写: ```java public enum Season { WINTER, SPRING, SUMMER, AUTUMN } ``` 在Python中,我使用标准库中的`Enum`。而在Go中,我只看到`const`和`iota`,但这有点不合理——只是数字,无法保证别人不会把数字999传给我的“enum”。 我需要实现订单状态: - New - Processing - Shipped - Delivered - Cancelled 我希望: 1. 有严格的类型检查(不能传入任意数字)。 2. 方便将状态输出为字符串,用于日志和用户显示。 3. 能够检查值是否属于有效集合。 在Go中如何正确实现?我听说过`iota`,但不知道如何创建带有方法的完整enum。还有——为什么Go没有像其他语言那样的原生enum?这是bug还是特性? 请给出