首页 > 其他分享 >go 枚举

go 枚举

时间:2023-04-25 12:45:33浏览次数:31  
标签:return 常量 nil 类型 枚举 WeekDay go

前言

枚举类型是一种常用的数据类型,用于表示一组有限的、预定义的、具名的常量值。在枚举类型中,每个常量都是一个枚举值,它们之间的值相等且唯一。

枚举类型通常用于表示一组相关的常量,比如星期、月份、性别等等。在其他语言里(比如 Java 和 C),都内置了枚举类型,而在 Go 语言里是没有内置枚举类型的,因此我们需要采用其他方式实现类似的枚举类型功能,本文将介绍如何实现 “枚举类型”。

Go 语言中的 “枚举类型”

枚举类型的值本质上是常量,因此我们可以使用 Go 语言中的常量来实现类似枚举类型的功能,例如:

const (
Sunday = 1
Tuesday = 2
Wednesday = 3
Thursday = 4
Friday = 5
Saturday = 6
Monday = 7
)

在这个例子中,我们使用了 const 关键字定义了一组常量,其中每个常量的名称代表着一个枚举,其值为对应的整数。

虽然这个例子能实现类似的枚举类型,但它不具备枚举类型的所有特征,例如缺少安全性约束性,为了解决这两个问题,我们可以使用自定义类型进行改进:

type WeekDay int

const (
Sunday WeekDay = 1
Tuesday WeekDay = 2
Wednesday WeekDay = 3
Thursday WeekDay = 4
Friday WeekDay = 5
Saturday WeekDay = 6
Monday WeekDay = 7
)

在改进后的例子中,我们定义了一个自定义类型 Weekday,用于表示星期几。使用 const 关键字定义一个常量组,其中每个常量都被赋予了一个具体的值,同时使用 Weekday 类型进行类型约束和类型检查。这样,我们就可以通过枚举值的名称来表示某个特定的星期几,并且由于使用了自定义类型,编译器可以进行类型检查,从而提高了类型安全性。

使用 iota 优雅实现枚举

通过前面的例子不难发现,当我们需要定义多个枚举值时,手动指定每个枚举常量的值会变得十分麻烦。为了解决这个问题,我们可以使用 iota 常量生成器,它可以帮助我们生成连续的整数值。

例如,使用 iota 定义一个星期几的枚举类型:

type WeekDay int

const (
Sunday WeekDay = iota
Tuesday
Wednesday
Thursday
Friday
Saturday
Monday
)
 func ValueOf(name string) (WeekDay, error) {
switch name {
case"Sunday":
return Sunday, nil
case"Monday":
return Monday, nil
case"Tuesday":
return Tuesday, nil
case"Wednesday":
return Wednesday, nil
case"Thursday":
return Thursday, nil
case"Friday":
return Friday, nil
case"Saturday":
return Saturday, nil
default:
return 0, fmt.Errorf("invalid WeekDay name: %s", name)
}
}

标签:return,常量,nil,类型,枚举,WeekDay,go
From: https://www.cnblogs.com/cheyunhua/p/17352270.html

相关文章

  • go 环境搭建
     安装包下载安装包下载地址(下面3个都可以):国外官方:https://golang.org/dl/中文镜像:https://golang.google.cn/dl/中文网站:https://studygolang.com/dl(推荐)以选择直接安装版本(.msi)或者压缩包版本(.zip) windos编辑器:VSCode(免费) 或GoLand(收费) ......
  • Go | 一分钟掌握Go | 6 - 指针
     作者:Mars酱 声明:本文章由Mars酱编写,部分内容来源于网络,如有疑问请联系本人。 转载:欢迎转载,转载前先请联系我!前言go的指针相比c++里面的已经容易很多了。c++的指针定义太多了:空指针、野指针、常量指针、指针常量,还有结构体指针,c++在指针这一块就复杂很多。我理解的Go的指针我理......
  • Python Django 制作商品列表展示
    新建名为goods应用pythonmanage.pystartappgoods修改chapter1/settings.py文件在INSTALLED_APPS数组中添加goods在对象TEMPLATES.OPTIONS中添加django.template.context_processors.media添加三个常量MEDIA_URL='/media/'MEDIA_ROOT=os.path.join(BASE......
  • Go 使用 MongoDB 实现分页查询
    解决过程CSDN中搜到一个有Bug的代码import( "context" "time" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options")funcFind(database*mongo.Databas......
  • uniapp 打包aab上传到google play的时候google 登录报异常
    因为App上传到GooglePlay后,会被重新签名(PlayAppSigning)谷歌为你生成的签名SHA-1将谷歌为你生成的签名SHA-1证书指纹复制到本应用已创建的凭据SHA-1处,点击保存后,ClientID并没有变,所以不用重新打包。现在,不用等,你可以试试Google+登录了。Google+登录ok。参考地址:https......
  • 【代理设计模式详解】C/Java/JS/Go/Python/TS不同语言实现
    简介代理模式(ProxyPattern)是一种结构型设计模式,用一个类来代理另一个类或几个类的功能。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。延迟初始化(虚拟代理)。如果你有一个偶尔使用的重量级服务对象,一直保持该对象运行会消耗系统资源时,可使用代理模式。访问......
  • COMP3310 Indexing a Gopher.
    COMP3310-Assignment2:IndexingaGopher.Background:Thisassignmentisworth15%ofthefinalmark.Itisdueby23:55Wednesday26AprilAESTLatesubmissionswillnotbeaccepted,exceptinspecialcircumstances.oExtensionsmustberequestedasea......
  • Go中的有限状态机FSM的详细介绍
    1、FSM简介1.1有限状态机的定义有限状态机(FiniteStateMachine,FSM)是一种数学模型,用于描述系统在不同状态下的行为和转移条件。状态机有三个组成部分:状态(State)、事件(Event)、动作(Action),事件(转移条件)触发状态的转移和动作的执行。动作的执行不是必须的,可以只转移状态,不指定任何......
  • mongodb使用自带命令工具导出导入数据
    记录mongo数据库用原生自带的命令工具使用json文件方式进行导入、导出的操作!在一次数据更新中,同事把老数据进行了清空操作,但是新的逻辑数据由于某种原因(好像是她的电脑中病毒了),一直无法正常连接数据库进行数据插入,然后下午2点左右要给甲方演示,所以要紧急恢复本地的部分数据......
  • 在mac上使用docker部署Mongo数据库
    拉取镜像打开网址https://hub.docker.com/,搜索mongo,https://hub.docker.com/_/mongo执行命令dockerpullmongo启动容器执行命令dockerimage,查看到mongo的tag是5.0.16启动命令dockerrun-dit--namemongo5-p27017:27017-v/Users/huidongma/data/mongodb:......