日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Go為什么要設(shè)計(jì)Iota常量?

Go 語言中有一個(gè)非常有特色的東西,那就是 iota 常量。經(jīng)過某魚的不完全統(tǒng)計(jì),許多 Go 開發(fā)者都是由 PHP、Java、C++、Python 等轉(zhuǎn)型過來,對此還是挺好奇的。

今天就由煎魚和大家一起深入學(xué)習(xí)。

Go 語法

在 Go 中枚舉常量是使用 iota 枚舉器創(chuàng)建的,在功能上,iota 關(guān)鍵字表示從 0 開始的整數(shù)常量;在作用上可以簡化使用自動(dòng)遞增數(shù)字的常量定義,非常方便。

以前定義一個(gè)枚舉值:

const (
a = 0
b = 1
c = 2
)

Go 有了 iota 關(guān)鍵字后:

const (
a = iota
b
c
)

對應(yīng)的值結(jié)果:

a=0
b=1
c=2

甚至還可以跳著來:

const (
a = iota
_
b
c
)

對應(yīng)的值結(jié)果:

a=0
b=2
c=3

也可以玩出花來:

const (
bit0, mask0 = 1 << iota, 1< bit1, mask1
_, _
bit3, mask3
)

對應(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ì)思考

對 iota 有了一定的基本了解后,開始進(jìn)入我們的主題,和煎魚一起發(fā)散好奇心。

  • 為什么叫 iota,是什么的簡稱嗎?
  • Go 為什么需要有 iota?

為什么叫 iota

實(shí)際上 iota 就是全名,在 stackoverflow 的提問[1]中已經(jīng)有許多社區(qū)朋友探討過(果然好奇的小伙伴挺多的)。

本質(zhì)上 ”iota“ 是希臘字母表的第 9 個(gè)字母。它是數(shù)學(xué)符號的典型,代表一個(gè)非常小的東西。

常用于以下的場景:

  • 作為和與算法中的迭代器。
  • 作為下標(biāo)索引。
  • 用于復(fù)數(shù)的虛數(shù)部分。

除了 Go 以外,在 APL、C++,又或是 Scheme 均有有 iota 常量的存在(設(shè)計(jì)),可以給到大家使用。

Scheme iota 的簽名如下:

iota count [start step]

作用是返回一個(gè)包含計(jì)數(shù)數(shù)字的列表,從起始點(diǎn)開始,每次增加步長。默認(rèn)的開始是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)通識。

為什么需要有

在《The Go Programming Language Specification[2]》中存在著對 iota 的明確定義和說明。

如下:

在一個(gè)常量聲明中,預(yù)先聲明的標(biāo)識符 iota 代表連續(xù)的無類型的整數(shù)常量。它的值是該常量聲明中各 ConstSpec 的索引,從0開始。

提取核心意義:Go 中的 iota 是 ConstSpec 索引,也就是填補(bǔ)的是連續(xù)的無類型整數(shù)常量的位置。

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

總結(jié)

在這篇文章中,我們介紹了 Go 中 iota 的基本語法。同時(shí)基于歷史資料針對 iota 到底是什么,為什么要這么叫,又有什么用進(jìn)行了一番研究。

也需要思考另外一個(gè)問題,并不是每一門語言都有 iota。那沒有 iota 的話會(huì)怎么樣,不存在是否也有其合理性呢?

參考資料

[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


網(wǎng)站名稱:Go為什么要設(shè)計(jì)Iota常量?
文章分享:http://www.5511xx.com/article/djooesh.html