Go??iota?常量基本語法介紹
Go 語言中有一個非常有特色的東西,那就是 iota 常量。經(jīng)過某魚的不完全統(tǒng)計,許多 Go 開發(fā)者都是由 PHP、Java、C++、Python 等轉型過來,對此還是挺好奇的。
Go 語法
在 Go 中枚舉常量是使用 iota 枚舉器創(chuàng)建的,在功能上,iota 關鍵字表示從 0 開始的整數(shù)常量;在作用上可以簡化使用自動遞增數(shù)字的常量定義,非常方便。
以前定義一個枚舉值:
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 有了一定的基本了解后,開始進入我們的主題,和煎魚一起發(fā)散好奇心。
為什么叫 iota,是什么的簡稱嗎?
Go 為什么需要有 iota?
為什么叫 iota
實際上 iota 就是全名,在 stackoverflow 的 提問 [1] 中已經(jīng)有許多社區(qū)朋友探討過(果然好奇的小伙伴挺多的)。
本質上 ”iota“ 是希臘字母表的第 9 個字母。它是數(shù)學符號的典型,代表一個非常小的東西。
常用于以下的場景:
作為和與算法中的迭代器。
作為下標索引。
用于復數(shù)的虛數(shù)部分。
除了 Go 以外,在 APL、C++,又或是 Scheme 均有有 iota 常量的存在(設計),可以給到大家使用。
Scheme iota 的簽名如下:
iota count [start step]
作用是返回一個包含計數(shù)數(shù)字的列表,從起始點開始,每次增加步長。默認的開始是0,默認的步驟是 1。
例如:
(iota 6) ? (0 1 2 3 4 5) (iota 4 2.5 -2) ? (2.5 0.5 -1.5 -3.5)
其實 iota 已經(jīng)是迭代器的一個 約定式命名 了,可以認為是也業(yè)內(nèi)通識。
為什么需要有
在《 The Go Programming Language Specification [2] 》中存在著對 iota 的明確定義和說明。
如下:
在一個常量聲明中, 預先聲明的標識符 iota 代表連續(xù)的無類型的整數(shù)常量。它的值是該常量聲明中各 ConstSpec 的索引 ,從0開始。
提取核心意義:Go 中的 iota 是 ConstSpec 索引,也就是 填補 的是連續(xù)的無類型整數(shù)常量的位置。
因此 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 常量內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
golang實現(xiàn)簡易的分布式系統(tǒng)方法
這篇文章主要介紹了golang實現(xiàn)簡易的分布式系統(tǒng)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-10-10優(yōu)雅使用GoFrame共享變量Context示例詳解
這篇文章主要為大家介紹了優(yōu)雅使用GoFrame共享變量Context示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06Go使用Protocol?Buffers在數(shù)據(jù)序列化的優(yōu)勢示例詳解
這篇文章主要為大家介紹了Go使用Protocol?Buffers在數(shù)據(jù)序列化的優(yōu)勢示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11Go標準庫strconv實現(xiàn)string類型與其他基本數(shù)據(jù)類型之間轉換
這篇文章主要為大家介紹了Go標準庫strconv實現(xiàn)string類型與其他基本數(shù)據(jù)類型之間轉換示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11