枚举是一个强大的特性,拥有广泛的应用场景。然而,在 Go 语言中,却没有原生支持枚举。在本文中,我将用 Go 语言的实现枚举。

枚举是从字面含义来说,就是列举出有穷集合中的所有元素。像一周的表示就是一个有限集合,只有七种可能的取值,所以一周就可以视为一个枚举类型。一个枚举项包含一个索引值(key)和一个字符值(value)。


先来实现基本的枚举功能,我们要实现以下几点:

typeintiotaIndexString

Stringer接口的定义如下:

以实现“周”的枚举为例,具体代码实现如下:

那该如何使用?我们可以这样使用枚举。

实现两个辅助函数

索引值字符值
ValuesExistOf

实现代码如下:

ExistOf

完整代码

https://github.com/newbugcoder/learngo/tree/master/enum

本文我们先介绍了枚举的结构,然后使用 Go 语言实现了枚举的特性以及辅助函数。本文的实现不能算得上完美,有点瑕疵,即:一个包作为一个枚举,包的利用率不高。但使用上算是相对优雅,也提供Go语言实现枚举的一种思路,如果有更好的方案,欢迎探讨。