自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

三分鐘帶你用 Go 語言實現(xiàn)枚舉

開發(fā) 前端
Go語言是沒有 enum 這個枚舉關(guān)鍵字的。那 Go 語言里面又是怎么處理枚舉這個問題的呢?我們這篇文章講解下!

本文轉(zhuǎn)載自微信公眾號「GoLang全?!?,作者小錕哥哥。轉(zhuǎn)載本文請聯(lián)系GoLang全棧公眾號。

Go語言是沒有 enum 這個枚舉關(guān)鍵字的。

那 Go 語言里面又是怎么處理枚舉這個問題的呢?

我們這篇文章講解下!

需要枚舉的場景

我們在處理人的姓名的時候,一般都是男或者女,或者最大再加一個未知,不會有其他類型吧。

像上面這種常見,我們一般就會使用枚舉處理。

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

如果是在其他語言:

from enum import Enum

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


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

Go 的實現(xiàn)

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

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

比如:

const(
SexMan = iota
SexWoman
SexUnknown
)

func main() {

fmt.Println(SexMan,SexWoman,SexUnknown)
}

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


首先我們知道 const 是用來定義常量的,后面接括號就是定義一組常量。

我們給第一個常量賦值為 iota,在這組常量中,之后的常量就會為我們自動賦值遞增。

iota有啥特點

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

const(
SexMan = iota
SexWoman
_
SexUnknown
)

func main() {

fmt.Println(SexMan,SexWoman,SexUnknown)
}

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


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

其他情況

還會出現(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 的常量定義中,如果有一個值被特殊賦值后,后面的值都會一樣。

解決辦法就是在需要恢復(fù)計數(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


技巧升級

我們在定義枚舉時,常常會顯示的聲明其類型,比如這樣:

type Sex int

const(
SexMan Sex = iota
SexWoman
SexUnknown
)


為什么要這樣做呢?

這樣做有一個好處,我們可以對我們的 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 時會去調(diào)用這個變量的 String 方法,于是打印就會出現(xiàn)男、女、未知了。

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

你學(xué)廢了么?

責(zé)任編輯:武曉燕 來源: GoLang全棧
相關(guān)推薦

2017-01-18 15:38:20

語言

2022-02-17 09:24:11

TypeScript編程語言javaScrip

2021-04-20 13:59:37

云計算

2024-01-16 07:46:14

FutureTask接口用法

2024-08-30 08:50:00

2020-06-30 10:45:28

Web開發(fā)工具

2024-06-06 08:50:43

2021-02-03 14:31:53

人工智能人臉識別

2024-01-12 07:38:38

AQS原理JUC

2024-07-05 09:31:37

2020-03-08 16:45:58

數(shù)據(jù)挖掘學(xué)習(xí)數(shù)據(jù)量

2024-09-13 08:49:45

2024-02-22 07:37:37

對象JVM內(nèi)存

2024-05-16 11:13:16

Helm工具release

2009-11-09 12:55:43

WCF事務(wù)

2024-12-18 10:24:59

代理技術(shù)JDK動態(tài)代理

2023-12-27 08:15:47

Java虛擬線程

2020-11-03 09:20:30

MySQLOracle數(shù)據(jù)庫

2013-06-28 14:30:26

棱鏡計劃棱鏡棱鏡監(jiān)控項目

2022-02-24 10:28:23

物聯(lián)網(wǎng)
點贊
收藏

51CTO技術(shù)棧公眾號