首頁  >  文章  >  後端開發  >  Go 為什麼要設計 iota 常數?

Go 為什麼要設計 iota 常數?

Golang菜鸟
Golang菜鸟轉載
2023-08-04 17:34:201328瀏覽

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 為什麼要設計 iota 常數?

常用於以下的場景:

  • 作为和与算法中的迭代器。
  • 作为下标索引。
  • 用于复数的虚数部分。

除了 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 的明确定义和说明。

如下:

Go 為什麼要設計 iota 常數?

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

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

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

总结

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

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

以上是Go 為什麼要設計 iota 常數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:Golang菜鸟。如有侵權,請聯絡admin@php.cn刪除