Go??iota?常量基本語(yǔ)法介紹
Go 語(yǔ)言中有一個(gè)非常有特色的東西,那就是 iota 常量。經(jīng)過(guò)某魚的不完全統(tǒng)計(jì),許多 Go 開(kāi)發(fā)者都是由 PHP、Java、C++、Python 等轉(zhuǎn)型過(guò)來(lái),對(duì)此還是挺好奇的。
Go 語(yǔ)法
在 Go 中枚舉常量是使用 iota 枚舉器創(chuàng)建的,在功能上,iota 關(guān)鍵字表示從 0 開(kāi)始的整數(shù)常量;在作用上可以簡(jiǎn)化使用自動(dòng)遞增數(shù)字的常量定義,非常方便。
以前定義一個(gè)枚舉值:
const (
a = 0
b = 1
c = 2
)
Go 有了 iota 關(guān)鍵字后:
const (
a = iota
b
c
)
對(duì)應(yīng)的值結(jié)果:
a=0
b=1
c=2
甚至還可以跳著來(lái):
const ( a = iota _ b c )
對(duì)應(yīng)的值結(jié)果:
a=0
b=2
c=3
也可以玩出花來(lái):
const ( bit0, mask0 = 1 << iota, 1<<iota - 1 bit1, mask1 _, _ bit3, mask3 )
對(duì)應(yīng)的值結(jié)果:
bit0 == 1, mask0 == 0 (iota == 0)
bit1 == 2, mask1 == 1 (iota == 1)
(iota == 2, unused)
bit3 == 8, mask3 == 7 (iota == 3)
設(shè)計(jì)思考
對(duì) iota 有了一定的基本了解后,開(kāi)始進(jìn)入我們的主題,和煎魚一起發(fā)散好奇心。
為什么叫 iota,是什么的簡(jiǎn)稱嗎?
Go 為什么需要有 iota?
為什么叫 iota
實(shí)際上 iota 就是全名,在 stackoverflow 的 提問(wèn) [1] 中已經(jīng)有許多社區(qū)朋友探討過(guò)(果然好奇的小伙伴挺多的)。
本質(zhì)上 ”iota“ 是希臘字母表的第 9 個(gè)字母。它是數(shù)學(xué)符號(hào)的典型,代表一個(gè)非常小的東西。

常用于以下的場(chǎng)景:
作為和與算法中的迭代器。
作為下標(biāo)索引。
用于復(fù)數(shù)的虛數(shù)部分。
除了 Go 以外,在 APL、C++,又或是 Scheme 均有有 iota 常量的存在(設(shè)計(jì)),可以給到大家使用。
Scheme iota 的簽名如下:
iota count [start step]
作用是返回一個(gè)包含計(jì)數(shù)數(shù)字的列表,從起始點(diǎn)開(kāi)始,每次增加步長(zhǎng)。默認(rèn)的開(kāi)始是0,默認(rèn)的步驟是 1。
例如:
(iota 6) ? (0 1 2 3 4 5) (iota 4 2.5 -2) ? (2.5 0.5 -1.5 -3.5)
其實(shí) iota 已經(jīng)是迭代器的一個(gè) 約定式命名 了,可以認(rèn)為是也業(yè)內(nèi)通識(shí)。
為什么需要有
在《 The Go Programming Language Specification [2] 》中存在著對(duì) iota 的明確定義和說(shuō)明。
如下:

在一個(gè)常量聲明中, 預(yù)先聲明的標(biāo)識(shí)符 iota 代表連續(xù)的無(wú)類型的整數(shù)常量。它的值是該常量聲明中各 ConstSpec 的索引 ,從0開(kāi)始。
提取核心意義:Go 中的 iota 是 ConstSpec 索引,也就是 填補(bǔ) 的是連續(xù)的無(wú)類型整數(shù)常量的位置。
因此 Go 中有它的一席位置。
總結(jié)
在這篇文章中,我們介紹了 Go 中 iota 的基本語(yǔ)法。同時(shí)基于歷史資料針對(duì) iota 到底是什么,為什么要這么叫,又有什么用進(jìn)行了一番研究。
也需要思考另外一個(gè)問(wèn)題,并不是每一門語(yǔ)言都有 iota。那沒(méi)有 iota 的話會(huì)怎么樣,不存在是否也有其合理性呢?
參考資料
[1]
提問(wèn): 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
到此這篇關(guān)于Go 為什么要設(shè)計(jì) iota 常量的文章就介紹到這了,更多相關(guān)Go iota 常量?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go中string與[]byte高效互轉(zhuǎn)的方法實(shí)例
string與[]byte經(jīng)常需要互相轉(zhuǎn)化,普通轉(zhuǎn)化會(huì)發(fā)生底層數(shù)據(jù)的復(fù)制,下面這篇文章主要給大家介紹了關(guān)于Go中string與[]byte高效互轉(zhuǎn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09
使用Go語(yǔ)言實(shí)現(xiàn)找出兩個(gè)大文件中相同的記錄
這篇文章主要為大家詳細(xì)介紹了使用Go語(yǔ)言實(shí)現(xiàn)找出兩個(gè)大文件中相同的記錄的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-10-10
Go中map數(shù)據(jù)類型3點(diǎn)小知識(shí)
這篇文章主要介紹了Go中map數(shù)據(jù)類型3點(diǎn)小知識(shí),在go中使用map時(shí)可能會(huì)用本文中的小知識(shí),需要的朋友可以參考下2014-10-10
Go語(yǔ)言中函數(shù)可變參數(shù)(Variadic Parameter)詳解
在Python中,在函數(shù)參數(shù)不確定數(shù)量的情況下,可以動(dòng)態(tài)在函數(shù)內(nèi)獲取參數(shù)。在Go語(yǔ)言中,也有類似的實(shí)現(xiàn)方式,本文就來(lái)為大家詳細(xì)講解一下2022-07-07

