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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
三分鐘帶你用Go語(yǔ)言實(shí)現(xiàn)枚舉

Go語(yǔ)言是沒(méi)有 enum 這個(gè)枚舉關(guān)鍵字的。

專注于為中小企業(yè)提供成都做網(wǎng)站、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)莆田免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了數(shù)千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

那 Go 語(yǔ)言里面又是怎么處理枚舉這個(gè)問(wèn)題的呢?

我們這篇文章講解下!

需要枚舉的場(chǎng)景

我們?cè)谔幚砣说男彰臅r(shí)候,一般都是男或者女,或者最大再加一個(gè)未知,不會(huì)有其他類型吧。

像上面這種常見(jiàn),我們一般就會(huì)使用枚舉處理。

我們會(huì)定義一個(gè)變量,希望他能只能賦 男、女、未知 這三種值。

如果是在其他語(yǔ)言:

from enum import Enum

class Sex(Enum):
man = 1
woman = 2
unknown = 3


然后在使用的時(shí)候就可以直接 Sex.main 直接調(diào)用。

Go 的實(shí)現(xiàn)

在 Go 語(yǔ)言中,我們?nèi)绻獙?shí)現(xiàn)枚舉,則需要使用常量計(jì)數(shù)器 iota 結(jié)合 const 來(lái)實(shí)現(xiàn)。

iota 是 go 語(yǔ)言的常量計(jì)數(shù)器,只能在 const 里面使用。

比如:

const(
SexMan = iota
SexWoman
SexUnknown
)

func main() {

fmt.Println(SexMan,SexWoman,SexUnknown)
}

// 執(zhí)行結(jié)果
$ go run main.go
0 1 2


首先我們知道 const 是用來(lái)定義常量的,后面接括號(hào)就是定義一組常量。

我們給第一個(gè)常量賦值為 iota,在這組常量中,之后的常量就會(huì)為我們自動(dòng)賦值遞增。

iota有啥特點(diǎn)

?iota 在 const 關(guān)鍵字出現(xiàn)時(shí),在 const 內(nèi)部的第一行之前就被初始化為 0 了,const 中每增加一行常量聲明就將自動(dòng)加 1 ,哪怕是 _ 這種聲明。

const(
SexMan = iota
SexWoman
_
SexUnknown
)

func main() {

fmt.Println(SexMan,SexWoman,SexUnknown)
}

// 執(zhí)行結(jié)果
$ go run main.go
0 1 3


你會(huì)發(fā)現(xiàn),最后一個(gè)變量的值變了。

其他情況

還會(huì)出現(xiàn)這種情況

const(
SexMan = iota
SexWoman = "woman"
SexUnknown
)

func main() {

fmt.Println(SexMan,SexWoman,SexUnknown)
}

// 執(zhí)行結(jié)果
$ go run main.go
0 woman woman


在出現(xiàn)了 iota 的常量定義中,如果有一個(gè)值被特殊賦值后,后面的值都會(huì)一樣。

解決辦法就是在需要恢復(fù)計(jì)數(shù)的地方再次賦值 iota 即可:

const(
SexMan = iota
SexWoman = "woman"
SexUnknown = iota
SexUnknown1
)

func main() {

fmt.Println(SexMan,SexWoman,SexUnknown,SexUnknown1)
}

// 執(zhí)行結(jié)果
$ go run main.go
0 woman 2 3


技巧升級(jí)

我們?cè)诙x枚舉時(shí),常常會(huì)顯示的聲明其類型,比如這樣:

type Sex int

const(
SexMan Sex = iota
SexWoman
SexUnknown
)


為什么要這樣做呢?

這樣做有一個(gè)好處,我們可以對(duì)我們的 Sex 類型進(jìn)行擴(kuò)展。

比如這樣:

type Sex int

func (this Sex) String() string {
switch this {
case 0:
return "男"
case 1:
return "女"
default:
return "未知"
}
}

const(
SexMan Sex = iota
SexWoman
SexUnknown
)

func main() {

fmt.Println(SexMan,SexWoman,SexUnknown)
}

// 執(zhí)行結(jié)果
$ go run main.go
男 女 未知


fmt 在 println 時(shí)會(huì)去調(diào)用這個(gè)變量的 String 方法,于是打印就會(huì)出現(xiàn)男、女、未知了。

當(dāng)然你還可以根據(jù)你的需要,進(jìn)行擴(kuò)展哇。

你學(xué)廢了么?


本文標(biāo)題:三分鐘帶你用Go語(yǔ)言實(shí)現(xiàn)枚舉
文章位置:http://www.5511xx.com/article/dhccggp.html