<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
我們知道iota
是go語言的常數計數器,只能在常數的const
表示式中使用,在const
關鍵字出現的時將被重置為0
,const
中每新增一行常數宣告iota值自增1(iota
可以理解為const語句塊中的行索引),使用iota可以簡化常數的定義,但其規則必須要牢牢掌握,否則在我們開發中可能會造成誤解,本文嘗試全面總結其使用用法以及其實現原理,需要的朋友可以參考以下內容,希望對大家有幫助。
iota
只能在常數的表示式中使用,iota
在const
關鍵字出現時將被重置為0
。不同const
定義塊互不干擾。
//const關鍵字出現時將被重置為0 const ( a = iota //0 b //1 ) //不同const定義塊互不干擾 const ( c = iota //0 )
const每新增一行常數宣告,iota計數一次,可以當做const語句中的索引,常用於定義列舉資料。
const ( n1 = iota //0 n2 //1 n3 //2 n4 //3 )
所有註釋行和空行在編譯時期首先會被清除,所以空行不計數。
const ( a = iota //0 b //1 //此行是註釋 c //2 )
如果某個值不需要,可以使用佔位 “_”
,它不是空行,會進行計數,起到跳值作用。
const ( a = iota //0 _ b //2 )
同一const塊出現多個iota,只會按照行數計數,不會重新計數。
const ( a = iota // a=0 b = iota // b=1 c = iota // c=2 )
一行多個iota,分別計數。
const ( a, b = iota, iota // a=0,b=0 c, d // c=1,d=1 )
開頭插隊會進行計數。
const ( a = 100 // a=100 b = iota // b=1 c = iota // c=2 d // d=3 )
中間插隊會進行計數。
const ( a = iota // a=0 b = 100 // b=100 c = iota // c=2 d // d=3 )
const ( a = iota // iota = 0 b = 1 + iota // iota = 1 c // iota = 2 )
iota 原始碼在 Go 語言程式碼庫中的定義位於內建檔案 go/src/builtin/builtin.go
中:
const iota = 0 // Untyped int.iota
在這裡宣告了一個常數識別符號,它的值是0;iota只是一個簡單的整數0,為什麼能作為常數計數器進行自增的,我們再看一下const的實現。
const 塊中每一行在 Go 中使用 spec 資料結構描述, spec 宣告如下:
ValueSpec struct { Doc *CommentGroup // associated documentation; or nil Names []*Ident // value names (len(Names) > 0) Type Expr // value type; or nil Values []Expr // initial values; or nil Comment *CommentGroup // line comments; or nil }
在這個結構體中有一個切片 ValueSpec.Names,此切片中儲存了一行中定義的常數,如果一行定義N個常數,那麼 ValueSpec.Names 切片長度即為N。
const塊實際上是spec型別的切片,用於表示const中的多行。
編譯期間構造常數時的偽演演算法如下:
for iota, spec := range ValueSpecs { for i, name := range spec.Names { obj := NewConst(name, iota...) //此處將iota傳入,用於構造常數 ... } }
iota實際上是遍歷const塊的索引,每行中即便多次使用iota,其值也不會遞增。
到此這篇關於一文搞懂Golang中iota的用法和原理的文章就介紹到這了,更多相關Golang iota內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45