golang中iota的用法小結(jié)
iota是Go語言的一個(gè)預(yù)定義標(biāo)識(shí)符,它表示的是const聲明塊(包括單行聲明)中每個(gè)常量所處位置在塊中的偏移值(從零開始)。同時(shí),每一行中的iota自身也是一個(gè)無類型常量,可以像無類型常量那樣自動(dòng)參與不同類型的求值過程,而無須對其進(jìn)行顯式類型轉(zhuǎn)換操作。
1.使用實(shí)例說明
// $GOROOT/src/sync/mutex.go (go 1.12.7) const ( mutexLocked = 1 << iota mutexWoken mutexStarving mutexWaiterShift = iota starvationThresholdNs = 1e6 )
iota在第一行出現(xiàn),iota在第一行即位0,在第二行即位1,在第三行即位2,在第四行即位3…
mutexLocked = 1 << iota:這里是const聲明塊的第一行,iota的值是該行在const塊中的偏移量,因此iota的值為0,我們得到mutexLocked這個(gè)常量的值為1 << 0,即1。mutexWoken:這里是const聲明塊的第二行,由于沒有顯式的常量初始化表達(dá)式,根據(jù)const聲明塊的“隱式重復(fù)前一個(gè)非空表達(dá)式”機(jī)制,該行等價(jià)于mutexWoken = 1 <<iota。由于該行是const塊中的第二行,因此偏移量iota的值為1,我們得到mutexWoken這個(gè)常量的值為1<< 1,即2。mutexStarving:該常量同mutexWoken,該行等價(jià)于mutexStarving = 1 << iota,由于在該行的iota的值為2,因此我們得到mutexStarving這個(gè)常量的值為 1 << 2,即4。mutexWaiterShift = iota:這一行的常量初始化表達(dá)式與前三行不同,由于該行為第四行,iota的偏移值為3,因此mutexWaiterShift的值就為3。位于同一行的iota即便出現(xiàn)多次,其值也是一樣的
2.常用方式
const ( _ = iota Blue Black Red Yellow )
默認(rèn)Blue=1,之后如果新加其他常量,不需要賦值,會(huì)自動(dòng)累加
參考圖書《Go語言精進(jìn)之路》,可以抽空翻翻,提高基礎(chǔ)知識(shí),也會(huì)有新的收獲
到此這篇關(guān)于golang中iota的用法小結(jié)的文章就介紹到這了,更多相關(guān)golang iota用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一些關(guān)于Go程序錯(cuò)誤處理的相關(guān)建議
錯(cuò)誤處理在每個(gè)語言中都是一項(xiàng)重要內(nèi)容,眾所周知,通常寫程序時(shí)遇到的分為異常與錯(cuò)誤兩種,Golang中也不例外,這篇文章主要給大家介紹了一些關(guān)于Go程序錯(cuò)誤處理的相關(guān)建議,需要的朋友可以參考下2021-09-09關(guān)于Golang獲取當(dāng)前項(xiàng)目絕對路徑的問題
這篇文章主要介紹了Golang獲取當(dāng)前項(xiàng)目絕對路徑的問題,通常的做法是go run用于本地開發(fā),用一個(gè)命令中快速測試代碼確實(shí)非常方便;在部署生產(chǎn)環(huán)境時(shí),我們會(huì)通過go build構(gòu)建出二進(jìn)制文件然后上傳到服務(wù)器再去執(zhí)行,那么會(huì)產(chǎn)生什么問題呢?感興趣的朋友一起看看吧2022-04-04基于Golang開發(fā)一個(gè)輕量級(jí)登錄庫/框架
幾乎每個(gè)項(xiàng)目都會(huì)有登錄,退出等用戶功能,而登錄又不單僅僅是登錄,我們要考慮很多東西。所以本文就來用Golang開發(fā)一個(gè)輕量級(jí)登錄庫/框架吧2023-05-05Go語言實(shí)現(xiàn)一個(gè)Http Server框架(二) Server的抽象
上一篇文章對http庫的基本使用做了說明,這篇文章主要介紹了如何實(shí)現(xiàn)一個(gè)簡單地httpServer,文中代碼示例非常詳細(xì),感興趣的朋友可以參考下2023-04-04