大家好,我是煎鱼。
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 的发问中曾经有许多社区敌人探讨过(果然好奇的小伙伴挺多的)。
实质上”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》中存在着对 iota 的明确定义和阐明。
如下:
在一个常量申明中,事后申明的标识符 iota 代表间断的无类型的整数常量。它的值是该常量申明中各 ConstSpec 的索引,从 0 开始。
提取外围,Go 中的 iota 填补的是 ConstSpec 索引,也就是间断的无类型的整数常量的地位。
因而 Go 中有它的一席地位。
总结
在这篇文章中,咱们介绍了 Go 中 iota 的根本语法。同时基于历史材料针对 iota 到底是什么,为什么要这么叫,又有什么用进行了一番钻研。
也须要思考另外一个问题,并不是每一门语言都有 iota。那没有 iota 的话会怎么样,不存在是否也有其合理性呢?
文章继续更新,能够微信搜【脑子进煎鱼了】浏览,本文 GitHub github.com/eddycjy/blog 已收录,学习 Go 语言能够看 Go 学习地图和路线,欢送 Star 催更。
Go 图书系列
- Go 语言入门系列:初探 Go 我的项目实战
- Go 语言编程之旅:深刻用 Go 做我的项目
- Go 语言设计哲学:理解 Go 的为什么和设计思考
- Go 语言进阶之旅:进一步深刻 Go 源码