乐趣区

关于go:Go-为什么要设计-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 的发问中曾经有许多社区敌人探讨过(果然好奇的小伙伴挺多的)。

实质上”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 源码
退出移动版