如何在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还是特性?
请给出