Avatar ·

在Go中表示枚举(enum)的惯用方式

大家好!我是Go新手,从Python和Java转过来,一直找不到一种正常的方式来实现枚举(enum)。在其他语言中,我习惯写类似这样的代码: ```python class Color(Enum): RED = 1 GREEN = 2 BLUE = 3 ``` 但在Go中,没有内置的`enum`类型。我尝试使用`const`和`iota`定义常量,但感觉这不够完善。例如,我想为订单状态创建一个类型:`New`、`Processing`、`Shipped`、`Delivered`、`Cancelled`。我需要满足以下要求: 1. 变量只能接受这些值之一。 2. 能够检查一个值是否有效。 3. 最好有一个`String()`方法用于漂亮的输出。 4. 并且要符合Go社区的惯用风格。 目前我是这样做的: ```go package main import "fmt" type OrderStatus int const ( New OrderStatus = iota Processing Shipped Delivered Cancelled ) func main() { status := New fmt.Println(s