iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Go语言中的iota怎么使用
  • 929
分享到

Go语言中的iota怎么使用

2024-04-02 19:04:59 929人浏览 薄情痞子
摘要

今天小编给大家分享一下Go语言中的iota怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一

今天小编给大家分享一下Go语言中的iota怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

源起枚举

最近做需求时,有一个需要枚举的场景,大概有10+个枚举类型,不愿意像定义一个开关那样敷衍的写成

    const (

    SwitchOff = 0

    SwitchOn = 1

    )

显得不够精致~

于是想到了iota,深入了解了下,这个小东西好像有点东西。

再回到需求本身——枚举。有了iota,就不用显示定义一大堆数值了。

未使用iota版本

    const (

    ColorRed = 0

    ColorOrange = 1

    ColorYellow = 2

    ColorGrassland = 3

    ColorCyan = 4

    ColorBlue = 5

    ColorPurple = 6

    )

使用iota版本

    const (

ColorRed = iota

    ColorOrange

    ColorYellow

    ColorGrassland

    ColorCyan

    ColorBlue

    ColorPurple

    )

两者的效果是一样的,各个枚举对应的值也是一样的。iota是从0开始,每一行都是往下递增。乍一看,iota还显得挺高端。

施展威力的同时,iota也有大家诟病的地方。

比如这时候如果需要添加一个"灰色"的枚举类型,在未使用iota版本里面不管在什么位置插入这个枚举,定义一个具体数值即可,比如对应7。

使用iota版本里面如果加在ColorPurple后面,对应的值就是7,没有问题。

但是如果在其他位置,那就会打破原来的平衡,比如放在ColorGrassland后

    const (

ColorRed = iota // 0

    ColorOrange // 1

    ColorYellow // 2

    ColorGrassland // 3

    ColorGray // 4

    ColorCyan // 5

    ColorBlue // 6

    ColorPurple // 7

    )

可以看出,从加入ColorGray后,从ColorCyan开始以及后面的枚举对应的值都变了。如果各个枚举的值在代码中已经hard code了,那这样的调整将是灾难性的。

iota虽然灵活,但似乎有点过于灵活了。

看到这,你以为你已经了解了iota,不,你没有,它比你想的还要灵活、复杂。

iota的花式玩法

首先来看一道送分题

    const (

    AA = iota

    BB

    _

    DD

    )

问题

此时DD对应的值是多少?

稍稍推理下,显然不是2,因为中间还多了个下划线。

没错,DD对应的值是3。这里的下划线"_"表示跳过某值,原本对应在这个位置的值应该是2,但是获取它不重要,所以使用下划线跳过了,这个用法也和Go对应下划线的定义保持一致。

比如遍历map集合,不需要使用key值时,可以写成

    for _, value := range testMap {

    fmt.Println(value)

    }

好,再看下一题

    const (

    AA = iota

    BB

    _

    DD = iota + 1

    EE

    )

问题

此时DD和EE对应的值是多少?

与上例不同,这里在DD后面重新指定了DD = iota + 1,即在原有的数据上加1,所以此时DD的值为3+1=4。

后面EE没有重新定义,则也会顺延DD的规则递增1,即5。

如果上面一题你得到了正确的答案,那下面一题也不就不难了。

    const (

    AA = iota

    BB

    _

    DD = iota + 1

    EE

    FF = iota + 2

    GG = iota

    )

问题

此时FF和GG对应的值是多少。

根据上一题,DD和EE分别对应4和5。

首先看这里的FF,注意这里的FF并不是顺延EE的值加1,然后再加2,如果是顺延则FF = 6 + 2 = 8。但是FF的值是7。

每当某个枚举被重置(即后面使用iota重新赋值时),则需要从第一个枚举数到当前的次序,比如这里从AA=0数到FF,此时FF的次序是5,然后再加2,即FF=5+2=7。

GG的值使用上面的方法,得到值为6。

注意:以上是我从结果反推得到的结论,一开始难以理解这里各个枚举对应的值,找到这个规则后,发现程序跑出来值和规则验证的一样。

下面看最后一道题

    const (

    AA, BB = iota + 1, iota + 2

    CC, DD

    )

问题

此时的AA、BB、CC和DD对应的值分别是多少

这里只需要明白一个规则,iota是每行才会加一。

所以这里第一行的iota都是0,则AA和BB对应的值分别是0+1=1和0+2=2。

下面的CC和DD都是顺延,对应的iota递增则为1,然后分别按照iota+1和iota+2的运算得到值为1+1 = 2和1+2 = 3。

好了,做完上面不管是送分题还是送命题,我想,你对iota这个小东西算是有一个真正的了解。

个人感觉,功能实现千万条,看懂再用第一条。

回到枚举

有时候我们使用枚举,不仅是定义它的值,还需要有对应的描述信息,我们知道这在Java里面是比较方便实现的,毕竟Java本来就有枚举的概念。

下面我们看看Go实现带有描述信息枚举的两种方式。

使用map映射

    const (

ColorRed = iota

    ColorOrange

    ColorYellow

    ColorGrassland

    ColorCyan

    ColorBlue

    ColorPurple

    )

    var ColORMap = map[int]string{

    ColorRed: "赤",

    ColorOrange: "橙",

    ColorYellow: "黄",

    ColorGrassland: "绿",

    ColorCyan: "青",

    ColorBlue: "蓝",

    ColorPurple: "紫",

    }

这样,如果想获取ColorRed对应的描述信息,就可以写成ColorMap[ColorRed]。

定义枚举类型

    type Color int

    const (

    ColorRed Color = iota

    ColorOrange

    ColorYellow

    ColorGrassland

    ColorCyan

    ColorBlue

    ColorPurple

    )

    func (c Color) String() string {

    switch c {

    case ColorRed:

    return "赤"

    case ColorOrange:

    return "橙"

    case ColorYellow:

    return "黄"

    case ColorGrassland:

    return "绿"

    case ColorCyan:

    return "青"

    case ColorBlue:

    return "蓝"

    case ColorPurple:

    return "紫"

    }

将颜色枚举定义为Color类型,则所有枚举值都是该类型,如果要获取ColorRed对应的描述信息,就可以写成ColorRed.String()。

以上就是“Go语言中的iota怎么使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: Go语言中的iota怎么使用

本文链接: https://www.lsjlt.com/news/71817.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go语言中的iota怎么使用
    今天小编给大家分享一下Go语言中的iota怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一...
    99+
    2024-04-02
  • Go语言中的Iota关键字怎么使用
    这篇文章主要讲解了“Go语言中的Iota关键字怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言中的Iota关键字怎么使用”吧!一、复习常量提到Iota这个关键字,就必须要复习一...
    99+
    2023-07-02
  • Go语言中的Iota关键字
    一、复习常量 提到Iota这个关键字,就必须要复习一下Go语言的常量。 1.Go语言的常量一般使用const声明 2.Go语言的常量只能是布尔型、数字型(整数型、浮点型和复数)和字符...
    99+
    2024-04-02
  • iota在Go中的使用方法
    这篇文章将为大家详细讲解有关iota在Go中的使用方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。go是什么golang是一种编译语言,可以将代码编译为机器代码,编译后的二进制文件可以直接部署到目标机器...
    99+
    2023-06-14
  • Go语言中的sync.Pool怎么使用
    本篇内容介绍了“Go语言中的sync.Pool怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 简介本文将介绍 Go 语言中的 s...
    99+
    2023-07-05
  • go语言中的decimal怎么使用
    这篇文章主要介绍了go语言中的decimal怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇go语言中的decimal怎么使用文章都会有所收获,下面我们一起来看看吧。decimal是为了解决Golang中...
    99+
    2023-07-05
  • go语言中怎么使用select
    这篇文章主要介绍“go语言中怎么使用select”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“go语言中怎么使用select”文章能帮助大家解决问题。在golang语言中,select语句...
    99+
    2023-06-30
  • go语言中mysql怎么使用
    本篇内容介绍了“go语言中mysql怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!golang支持多种数据库MySQLMySQL是一...
    99+
    2023-07-04
  • Go语言中的事务怎么使用
    本篇内容主要讲解“Go语言中的事务怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go语言中的事务怎么使用”吧!事务实践服务端在进行和数据库交互时,对于一些场景我们可能会使用事务来保证数据...
    99+
    2023-07-06
  • Go语言中defer语句怎么使用
    今天小编给大家分享一下Go语言中defer语句怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.在一个函数内的def...
    99+
    2023-07-02
  • Go语言中的链表怎么使用
    本篇内容主要讲解“Go语言中的链表怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go语言中的链表怎么使用”吧!1. 什么是链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的...
    99+
    2023-06-30
  • Go语言中的闭包怎么使用
    这篇文章主要讲解了“Go语言中的闭包怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言中的闭包怎么使用”吧!闭包基本介绍闭包就是 一个函数 和其相关的&nbs...
    99+
    2023-07-04
  • Go语言中的接口怎么使用
    今天小编给大家分享一下Go语言中的接口怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。接口在 Go 语言中,接口是一种...
    99+
    2023-07-04
  • Go语言中的包Package怎么使用
    本文小编为大家详细介绍“Go语言中的包Package怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Go语言中的包Package怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。问题一、Go使用Pac...
    99+
    2023-07-02
  • Go语言中的条件语句怎么使用
    这篇文章主要介绍“Go语言中的条件语句怎么使用”,在日常操作中,相信很多人在Go语言中的条件语句怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言中的条件语句怎么使用”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-30
  • Go语言中的:=怎么用
    这篇文章主要为大家展示了“Go语言中的:=怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Go语言中的:=怎么用”这篇文章吧。1. 单变量 :=Go 语言中新增了一个特殊的运算符:=,这个运...
    99+
    2023-06-22
  • 怎么使用GO语言
    这篇文章主要讲解了“怎么使用GO语言”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用GO语言”吧!什么是 GVMGo 语言版本管理器(GVM)是管理 Go 语言环境的开源工具。GVM ...
    99+
    2023-06-16
  • go语言中for range怎么使用
    这篇文章主要介绍“go语言中for range怎么使用”,在日常操作中,相信很多人在go语言中for range怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”go语言中for range怎么使用”的疑...
    99+
    2023-07-04
  • Go语言的exec怎么使用
    本篇内容介绍了“Go语言的exec怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Exec 是 os 包中的一个子包,它可用于使用 G...
    99+
    2023-06-30
  • go语言中怎么使用openssl库
    在Go语言中使用OpenSSL库可以通过调用C语言的接口来实现。首先需要安装CGO工具,然后在Go代码中引入C语言的头文件和库文件,...
    99+
    2024-04-09
    go语言 openssl
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作