日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Go?iota關鍵字與枚舉類型實現原理_Golang

作者:樹獺叔叔??????? ? 更新時間: 2022-09-24 編程語言

1. iota關鍵字

iota是go語言的常量計數器,只能在常量的表達式中使用,其值從0開始,在const中每新增一行iota自己增長1,其值一直自增1直到遇到下一個const關鍵字,其值才被重新置為0。

const (
    a int = iota // 0
    b            // 1
    c            // 2
    d            // 3
)

另外,iota在使用時,可以跳過某幾行(需要注意的是,空格并不算行)。

const ( 
    a = iota // 0 
    b        // 1 
    c        // 2 
    _ 
    _ 
    d        // 5 
)

并且,iota可以參與數學運算。

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
)

并且,在同一行中,一個iota可以多次使用:

const (
    a, q int = iota, iota + 1 // 0, 1
    b, w                      // 1, 2
    c, e                      // 2, 3
    d, r                      // 3, 4
)

綜上所示,我們可以發現,iota就類似于在一個const的()中的一個行計數,當我們調用它時,不論我們使用與否,使用多少次,itap都會會對每一行進行一個計數。

2. 枚舉類型

枚舉用來表示只包含有限數量的固定值的類型,在開發中一般用于標識錯誤碼或者狀態機。拿一個實體對象的狀態機來說,它通常與這個對象在數據庫里對應記錄的標識狀態的字段值相對應。

Java 為我們提供了現成的枚舉類的實現形式。但是在Go中并沒有,因此我們可以借助type定義一個類型與iota結合實現枚舉類的效果:

type Season int

const (
	Summer Season = 1
	Autumn        = 2
	Winter        = 3
	Spring        = 4
)

雖然底層的實現仍然是int類型,但是當我們使用int類型直接與Season類型的變量比較時,會出現編譯不通過的錯我,這樣我們就可以對我們需要的枚舉類型做類型限制了。

當然,我們也可以結合上面提到的itao,進行打優化:

type Season int

const (
	Summer Season = iota + 1
	Autumn        
	Winter        
	Spring        
)

原文鏈接:https://juejin.cn/post/7121660177815699487

欄目分類
最近更新