当前位置: 首页 > news >正文

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

http://www.dtcms.com/a/9483.html

相关文章:

  • AWS中所有与数据科学有关的服务一览表(MLS-C01)
  • <爬虫部署,进阶Docker>----第二章 安装Docker
  • 几个不错的 Jupyter Notebook 云端展示平台
  • 基于springboot的牙科就诊管理系统
  • Lua | 一篇文章讲清Lua语法及热更新
  • dfs剪枝
  • Java类的多态作用及解析
  • 【设计模式】第二讲:单例模式
  • NoSQL
  • Vue+SpringBoot打造陕西非物质文化遗产网站
  • python练习3
  • 外包干了5天,技术退步明显。。。。
  • 第五篇:数字视频广告格式概述 - IAB视频广告标准《数字视频和有线电视广告格式指南》
  • 【题目】【网络系统管理】2019年全国职业技能大赛高职组计算机网络应用赛项H卷
  • 二十、软考-系统架构设计师笔记-真题解析-2020年真题
  • SAP HCM 0008信息类型间接评估与直接评估
  • 训练svm并部署树莓派
  • 【Flutter学习笔记】10.1 自定义组件方法简介
  • nginx相关内容的安装
  • 【UE5】动画蒙太奇简述
  • python共享单车信息系统的设计与实现flask-django-php-nodejs
  • 【爬虫】web自动化和接口自动化
  • [嵌入式系统-39]:龙芯1B 开发学习套件 -9-PMON的文件结构
  • 大模型主流微调训练方法总结 LoRA、Adapter、Prefix-tuning、P-tuning、Prompt-tuning 并训练自己的数据集
  • 代码+视频,R语言使用BOOT重抽样获取cox回归方程C-index(C指数)可信区间
  • 贝尔曼方程【Bellman Equation】
  • 使用 ZipArchiveInputStream 读取压缩包内文件总数
  • RuoYi-Vue开源项目2-前端登录验证码生成过程分析
  • 记录一次服务器内存使用率过高达到90%告警问题排查。
  • 基于SpringBoot的高校办公室行政事务管理系统