Go  iota 常量基本语法介绍

 更新时间:2022年06月02日 10:14:22   作者:脑子进煎鱼了  
这篇文章主要介绍了Go 为什么要设计 iota 常量,我们介绍了 Go 中 iota 的基本语法。同时基于历史资料针对 iota 到底是什么,为什么要这么叫,又有什么用进行了一番研究,需要的朋友可以参考下

Go 语言中有一个非常有特色的东西,那就是 iota 常量。经过某鱼的不完全统计,许多 Go 开发者都是由 PHP、Java、C++、Python 等转型过来,对此还是挺好奇的。

Go 语法

在 Go 中枚举常量是使用 iota 枚举器创建的,在功能上,iota 关键字表示从 0 开始的整数常量;在作用上可以简化使用自动递增数字的常量定义,非常方便。

以前定义一个枚举值:

const (
    a = 0
    b = 1
    c = 2
)

Go 有了 iota 关键字后:

const (
    a = iota
    b
    c
)

对应的值结果:

a=0
b=1
c=2

甚至还可以跳着来:

const (
 a = iota
 _
 b
 c
)

对应的值结果:

a=0
b=2
c=3

也可以玩出花来:

const (
 bit0, mask0 = 1 << iota, 1<<iota - 1
 bit1, mask1                           
 _, _                                  
 bit3, mask3                          
)

对应的值结果:

bit0 == 1, mask0 == 0  (iota == 0)
bit1 == 2, mask1 == 1  (iota == 1)
                       (iota == 2, unused)
bit3 == 8, mask3 == 7  (iota == 3)

设计思考

对 iota 有了一定的基本了解后,开始进入我们的主题,和煎鱼一起发散好奇心。

  • 为什么叫 iota,是什么的简称吗?

  • Go 为什么需要有 iota?

为什么叫 iota

实际上 iota 就是全名,在 stackoverflow 的 提问 [1] 中已经有许多社区朋友探讨过(果然好奇的小伙伴挺多的)。

本质上 ”iota“ 是希腊字母表的第 9 个字母。它是数学符号的典型,代表一个非常小的东西。

常用于以下的场景:

  • 作为和与算法中的迭代器。

  • 作为下标索引。

  • 用于复数的虚数部分。

除了 Go 以外,在 APL、C++,又或是 Scheme 均有有 iota 常量的存在(设计),可以给到大家使用。

Scheme iota 的签名如下:

iota count [start step]

作用是返回一个包含计数数字的列表,从起始点开始,每次增加步长。默认的开始是0,默认的步骤是 1。

例如:

(iota 6)        ⇒ (0 1 2 3 4 5)
(iota 4 2.5 -2) ⇒ (2.5 0.5 -1.5 -3.5)

其实 iota 已经是迭代器的一个 约定式命名 了,可以认为是也业内通识。

为什么需要有

在《 The Go Programming Language Specification [2] 》中存在着对 iota 的明确定义和说明。

如下:

在一个常量声明中, 预先声明的标识符 iota 代表连续的无类型的整数常量。它的值是该常量声明中各 ConstSpec 的索引 ,从0开始。

提取核心意义:Go 中的 iota 是 ConstSpec 索引,也就是 填补 的是连续的无类型整数常量的位置。

因此 Go 中有它的一席位置。

总结

在这篇文章中,我们介绍了 Go 中 iota 的基本语法。同时基于历史资料针对 iota 到底是什么,为什么要这么叫,又有什么用进行了一番研究。

也需要思考另外一个问题,并不是每一门语言都有 iota。那没有 iota 的话会怎么样,不存在是否也有其合理性呢?

参考资料

[1]

提问: https://stackoverflow.com/questions/31650192/whats-the-full-name-for-iota-in-golang

[2]

The Go Programming Language Specification: https://go.dev/ref/spec#Iota

到此这篇关于Go 为什么要设计 iota 常量的文章就介绍到这了,更多相关Go  iota 常量内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • golang实现简易的分布式系统方法

    golang实现简易的分布式系统方法

    这篇文章主要介绍了golang实现简易的分布式系统方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • Go Java算法之Excel表列名称示例详解

    Go Java算法之Excel表列名称示例详解

    这篇文章主要为大家介绍了Go Java算法之Excel表列名称示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • GO语言Defer用法实例分析

    GO语言Defer用法实例分析

    这篇文章主要介绍了GO语言Defer用法,实例分析了Defer的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • 优雅使用GoFrame共享变量Context示例详解

    优雅使用GoFrame共享变量Context示例详解

    这篇文章主要为大家介绍了优雅使用GoFrame共享变量Context示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Go使用Protocol Buffers在数据序列化的优势示例详解

    Go使用Protocol Buffers在数据序列化的优势示例详解

    这篇文章主要为大家介绍了Go使用Protocol Buffers在数据序列化的优势示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Go标准库strconv实现string类型与其他基本数据类型之间转换

    Go标准库strconv实现string类型与其他基本数据类型之间转换

    这篇文章主要为大家介绍了Go标准库strconv实现string类型与其他基本数据类型之间转换示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • 浅谈JWT在GO中的使用方法及原理

    浅谈JWT在GO中的使用方法及原理

    JWT是一种基于 JSON 的开放标准,用于在网络应用间传递声明,JWT被设计为可安全地将用户身份验证和授权数据作为 JSON 对象在各个应用程序之间传递,本文将详细给大家介绍JWT原理及在Go中的用法,需要的朋友可以参考下
    2023-05-05
  • 详解Go中Set的实现方式

    详解Go中Set的实现方式

    这篇文章主要介绍了详解Go中Set的实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Go计算某段代码运行所耗时间简单实例

    Go计算某段代码运行所耗时间简单实例

    这篇文章主要给大家介绍了关于Go计算某段代码运行所耗时间的相关资料,主要介绍了Golang记录计算函数执行耗时、运行时间的一个简单方法,文中给出了详细的代码示例,需要的朋友可以参考下
    2023-11-11
  • 利用golang实现pdf中自动换行的表格

    利用golang实现pdf中自动换行的表格

    这篇文章主要给大家介绍了如何利用golang实现pdf中自动换行的表格,文中通过代码示例给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-02-02

最新评论