在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