golang实现枚举
golang实现枚举
golang实现枚举
golang本身是没有枚举类型的,不像c语言,但是可以通过const & iota实现枚举的能力。
枚举在类似于业务状态或者少量下拉选择框中经常使用,比如
业务状态:待开始、进行中、失败、成功
package main
import "fmt"
// Status 自定义类型
type Status int
const (
Pending Status = iota //待开始 0
InProgress //进行中 1
Failed //失败 2
Success //成功 3
)
func main() {
fmt.Println("Pending =", Pending)
fmt.Println("InProgress =", InProgress)
fmt.Println("Failed =", Failed)
fmt.Println("Success =", Success)
}
如果不想从0
开始,想从100开始
// Status 自定义类型
type Status int
const (
Pending Status = iota + 100 //待开始 100
InProgress //进行中 101
Failed //失败 102
Success //成功 103
)
使用map为常量设置对应的中文描述
package main
import "fmt"
// Status 自定义类型
type Status int
const (
Pending Status = iota //待开始
InProgress //进行中
Failed //失败
Success //成功
)
// 定义一个映射表,键是Status类型,值是对应的中文描述
var statusDescriptions = map[Status]string{
Pending: "待开始",
InProgress: "进行中",
Failed: "失败",
Success: "成功",
}
func main() {
fmt.Println(InProgress, ":", statusDescriptions[InProgress]) //1 : 进行中
fmt.Println(Success, ":", statusDescriptions[Success]) //3 : 成功
}
判断某个状态是否在设定内
package main
import "fmt"
// Status 自定义类型
type Status int
const (
Pending Status = iota //待开始
InProgress //进行中
Failed //失败
Success //成功
)
// 定义一个映射表,键是Status类型,值是对应的中文描述
var statusDescriptions = map[Status]string{
Pending: "待开始",
InProgress: "进行中",
Failed: "失败",
Success: "成功",
}
// 创建一个映射,键为Status枚举类型,值为布尔值
var statusMap = map[Status]bool{
Pending: true,
InProgress: true,
Failed: true,
Success: true,
}
func main() {
fmt.Println(statusMap[Success]) //true
var param = 6
fmt.Println(statusMap[Status(param)]) //false
if !statusMap[Status(param)] {
fmt.Println("状态未在设定内")
}
}