成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

三分鐘帶你用 Go 語言實現枚舉

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

本文轉載自微信公眾號「GoLang全?!梗髡咝″K哥哥。轉載本文請聯系GoLang全棧公眾號。

Go語言是沒有 enum 這個枚舉關鍵字的。

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

我們這篇文章講解下!

需要枚舉的場景

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

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

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

如果是在其他語言:

from enum import Enum

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


然后在使用的時候就可以直接 Sex.main 直接調用。

Go 的實現

在 Go 語言中,我們如果要實現枚舉,則需要使用常量計數器 iota 結合 const 來實現。

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

比如:

const(
SexMan = iota
SexWoman
SexUnknown
)

func main() {

fmt.Println(SexMan,SexWoman,SexUnknown)
}

// 執行結果
$ go run main.go
0 1 2


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

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

iota有啥特點

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

const(
SexMan = iota
SexWoman
_
SexUnknown
)

func main() {

fmt.Println(SexMan,SexWoman,SexUnknown)
}

// 執行結果
$ go run main.go
0 1 3


你會發現,最后一個變量的值變了。

其他情況

還會出現這種情況

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

func main() {

fmt.Println(SexMan,SexWoman,SexUnknown)
}

// 執行結果
$ go run main.go
0 woman woman


在出現了 iota 的常量定義中,如果有一個值被特殊賦值后,后面的值都會一樣。

解決辦法就是在需要恢復計數的地方再次賦值 iota 即可:

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

func main() {

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

// 執行結果
$ go run main.go
0 woman 2 3


技巧升級

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

type Sex int

const(
SexMan Sex = iota
SexWoman
SexUnknown
)


為什么要這樣做呢?

這樣做有一個好處,我們可以對我們的 Sex 類型進行擴展。

比如這樣:

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)
}

// 執行結果
$ go run main.go
男 女 未知


fmt 在 println 時會去調用這個變量的 String 方法,于是打印就會出現男、女、未知了。

當然你還可以根據你的需要,進行擴展哇。

你學廢了么?

責任編輯:武曉燕 來源: GoLang全棧
相關推薦

2017-01-18 15:38:20

語言

2024-08-30 08:50:00

2022-02-17 09:24:11

TypeScript編程語言javaScrip

2024-01-16 07:46:14

FutureTask接口用法

2021-04-20 13:59:37

云計算

2020-06-30 10:45:28

Web開發工具

2024-06-06 08:50:43

2024-07-05 09:31:37

2024-01-12 07:38:38

AQS原理JUC

2021-02-03 14:31:53

人工智能人臉識別

2020-03-08 16:45:58

數據挖掘學習數據量

2024-09-13 08:49:45

2024-02-22 07:37:37

對象JVM內存

2024-05-16 11:13:16

Helm工具release

2009-11-09 12:55:43

WCF事務

2024-12-18 10:24:59

代理技術JDK動態代理

2023-12-27 08:15:47

Java虛擬線程

2020-11-03 09:20:30

MySQLOracle數據庫

2013-06-28 14:30:26

棱鏡計劃棱鏡棱鏡監控項目

2024-08-05 09:05:44

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美lesbianxxxxhd视频社区 | 四虎影院在线免费观看 | 欧美成人精品二区三区99精品 | 99九色 | av超碰| 99国产精品视频免费观看一公开 | 理论片免费在线观看 | 视频二区在线观看 | 久久婷婷麻豆国产91天堂 | 国产一级视频在线 | 国产视频一区二区 | 成人免费小视频 | 国产欧美日韩一区二区三区在线 | 夜夜草| 在线免费国产 | 毛片在线免费 | 日本特黄a级高清免费大片 国产精品久久性 | 91在线第一页 | 国产精品久久久久久久久久 | 亚洲综合一区二区三区 | 日本精品一区二区三区视频 | 五月综合激情婷婷 | 久久国产亚洲 | 精品av | 在线观看国产 | 中文字幕一区二区三区四区五区 | 一区二区三区 在线 | 精品一区二区三区在线播放 | 先锋资源网站 | 99在线免费观看视频 | 久久精品一区二区三区四区 | 成人av在线播放 | 777zyz色资源站在线观看 | 日韩成人在线免费观看 | 日韩成人免费视频 | 亚洲午夜精品一区二区三区他趣 | 日日网| 九九热免费视频在线观看 | 日韩中文字幕av | 成人一区二区三区在线观看 | 免费观看一级特黄欧美大片 |