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("状态未在设定内")
	}
}

相关推荐

  1. golang实现

    2024-03-25 17:42:01       43 阅读
  2. golang接口//结构使用示例

    2024-03-25 17:42:01       28 阅读
  3. springboot实现参数

    2024-03-25 17:42:01       24 阅读
  4. 代码生成实践

    2024-03-25 17:42:01       62 阅读
  5. SpringBoot实现类型参数认证

    2024-03-25 17:42:01       53 阅读
  6. 递归实现组合型

    2024-03-25 17:42:01       33 阅读
  7. 实验问题(过程模拟)

    2024-03-25 17:42:01       38 阅读
  8. 实验问题(运算模拟)

    2024-03-25 17:42:01       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-25 17:42:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-25 17:42:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-25 17:42:01       82 阅读
  4. Python语言-面向对象

    2024-03-25 17:42:01       91 阅读

热门阅读

  1. Qt笔记 计时器

    2024-03-25 17:42:01       43 阅读
  2. Day28:学习SpringCloud

    2024-03-25 17:42:01       38 阅读
  3. 为什么大家都在推美国MSB?

    2024-03-25 17:42:01       40 阅读
  4. 编程生活day3--Left Pad、出生年

    2024-03-25 17:42:01       42 阅读
  5. 服务器如何检查端口是否被占用并杀死进程

    2024-03-25 17:42:01       41 阅读
  6. AWTK-MODBUS 服务器

    2024-03-25 17:42:01       42 阅读