Go?iota關(guān)鍵字與枚舉類型實(shí)現(xiàn)原理
1. iota關(guān)鍵字
iota是go語(yǔ)言的常量計(jì)數(shù)器,只能在常量的表達(dá)式中使用,其值從0開始,在const中每新增一行iota自己增長(zhǎng)1,其值一直自增1直到遇到下一個(gè)const關(guān)鍵字,其值才被重新置為0。
const (
a int = iota // 0
b // 1
c // 2
d // 3
)另外,iota在使用時(shí),可以跳過某幾行(需要注意的是,空格并不算行)。
const (
a = iota // 0
b // 1
c // 2
_
_
d // 5
)并且,iota可以參與數(shù)學(xué)運(yùn)算。
type Allergen int
const (
IgEggs Allergen = 1 << iota // 1 << 0 which is 00000001 = 1
IgChocolate // 1 << 1 which is 00000010 = 2
IgNuts // 1 << 2 which is 00000100 = 4
IgStrawberries // 1 << 3 which is 00001000 = 8
IgShellfish // 1 << 4 which is 00010000 = 16
)并且,在同一行中,一個(gè)iota可以多次使用:
const (
a, q int = iota, iota + 1 // 0, 1
b, w // 1, 2
c, e // 2, 3
d, r // 3, 4
)綜上所示,我們可以發(fā)現(xiàn),iota就類似于在一個(gè)const的()中的一個(gè)行計(jì)數(shù),當(dāng)我們調(diào)用它時(shí),不論我們使用與否,使用多少次,itap都會(huì)會(huì)對(duì)每一行進(jìn)行一個(gè)計(jì)數(shù)。
2. 枚舉類型
枚舉用來表示只包含有限數(shù)量的固定值的類型,在開發(fā)中一般用于標(biāo)識(shí)錯(cuò)誤碼或者狀態(tài)機(jī)。拿一個(gè)實(shí)體對(duì)象的狀態(tài)機(jī)來說,它通常與這個(gè)對(duì)象在數(shù)據(jù)庫(kù)里對(duì)應(yīng)記錄的標(biāo)識(shí)狀態(tài)的字段值相對(duì)應(yīng)。
Java 為我們提供了現(xiàn)成的枚舉類的實(shí)現(xiàn)形式。但是在Go中并沒有,因此我們可以借助type定義一個(gè)類型與iota結(jié)合實(shí)現(xiàn)枚舉類的效果:
type Season int const ( Summer Season = 1 Autumn = 2 Winter = 3 Spring = 4 )
雖然底層的實(shí)現(xiàn)仍然是int類型,但是當(dāng)我們使用int類型直接與Season類型的變量比較時(shí),會(huì)出現(xiàn)編譯不通過的錯(cuò)我,這樣我們就可以對(duì)我們需要的枚舉類型做類型限制了。
當(dāng)然,我們也可以結(jié)合上面提到的itao,進(jìn)行打優(yōu)化:
type Season int const ( Summer Season = iota + 1 Autumn Winter Spring )
到此這篇關(guān)于Go iota關(guān)鍵字與枚舉類型實(shí)現(xiàn)原理的文章就介紹到這了,更多相關(guān)Go iota關(guān)鍵字 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
從基礎(chǔ)到高級(jí)全方位解析Go中反射的應(yīng)用
本文我們將全面深入地探討Go語(yǔ)言的反射機(jī)制,從反射的基礎(chǔ)概念、為什么需要反射,到如何在Go中實(shí)現(xiàn)反射,以及在高級(jí)編程場(chǎng)景如泛型編程和插件架構(gòu)中的應(yīng)用,需要的可以參考下2023-10-10
Go實(shí)現(xiàn)基于RSA加密算法的接口鑒權(quán)
這篇文章主要介紹了Go實(shí)現(xiàn)基于RSA加密算法的接口鑒權(quán),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-06-06
golang中l(wèi)og包自定義輸出日志格式與寫入到文件
這篇文章主要給大家介紹了關(guān)于golang中l(wèi)og包自定義輸出日志格式與寫入到文件的相關(guān)資料,日志輸出在任何項(xiàng)目中都極其重要,是有助于后續(xù)我們排查解決程序BUG,需要的朋友可以參考下2023-06-06
Go設(shè)置http請(qǐng)求超時(shí)的方法實(shí)現(xiàn)
這篇文章主要介紹了Go設(shè)置http請(qǐng)求超時(shí)的方法實(shí)現(xiàn),最近接手了一個(gè)老項(xiàng)目進(jìn)行維護(hù),發(fā)現(xiàn)其中有個(gè)關(guān)于 http 請(qǐng)求的方法設(shè)置的 timeout 沒有生效,很奇怪,一開始查看代碼并沒有發(fā)現(xiàn)什么可疑點(diǎn),后查看了源碼,打斷點(diǎn)調(diào)試才發(fā)現(xiàn)問題所在,這里簡(jiǎn)單記錄復(fù)盤一下2024-08-08
Golang應(yīng)用執(zhí)行Shell命令實(shí)戰(zhàn)
本文主要介紹了Golang應(yīng)用執(zhí)行Shell命令實(shí)戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
golang post請(qǐng)求常用的幾種方式小結(jié)
這篇文章主要介紹了golang post請(qǐng)求常用的幾種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04

