精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

伙計(jì),Go項(xiàng)目怎么使用枚舉?

開發(fā) 前端
雖然Go語言沒有提供枚舉類型,但是我們也可以根據(jù)Go語言的兩個(gè)特性:常量和定義新類型來實(shí)現(xiàn)枚舉,方法總比困難多嗎?

前言

哈嘍,大家好,我是asong?。枚舉是一種很重要的數(shù)據(jù)類型,在java、C語言等主流編程語言中都支持了枚舉類型,但是在Go語言中卻沒有枚舉類型,那有什么替代方案嗎?本文我們來聊一聊這個(gè)事情;

為什么要有枚舉

我們以java?語言為例子,在JDK1.5?之前沒有枚舉類型,我們通常會(huì)使用int常量來表示枚舉,一般使用如下:

public static final int COLOR_RED = 1;
public static final int COLOR_BLUE = 2;
public static final int COLOR_GREEN = 3;

使用int類型會(huì)存在以下隱患:

  • 不具備安全性,聲明時(shí)如果沒有使用final就會(huì)造成值被篡改的風(fēng)險(xiǎn);
  • 語義不夠明確,打印int型數(shù)字并不知道其具體含義

于是乎我們就想到用常量字符來表示,代碼就變成了這樣:

public static final String COLOR_RED = "RED";
public static final String COLOR_BLUE = "BLUE";
public static final String COLOR_GREEN = "GREEN";

這樣也同樣存在問題,因?yàn)槲覀兪褂玫某A孔址敲从行┏绦蛟巢话刺茁烦雠凭涂梢允褂米址闹颠M(jìn)行比較,這樣的代碼會(huì)被不斷模仿變得越來越多的,然后屎山就出現(xiàn)了;

所以我們迫切需要枚舉類型的出現(xiàn)來起到約束的作用,假設(shè)使用一個(gè)枚舉類型做入?yún)ⅲ杜e類型就可以限定沙雕用戶不按套路傳參,這樣就可以懟他了,哈哈~;

使用枚舉的代碼就可以變成這樣,傳了枚舉之外的類型都不可以了;

public class EnumClass {
public static void main(String [] args){
Color color = Color.RED;
convert(color);
System.out.println(color.name());

}

public static void convert(Color c){
System.out.println(c.name());
}

}

enum Color{
RED,BLUE,GREEN;
}

Go語言就沒有枚舉類型,我們?cè)撌褂檬裁捶椒▉硖娲兀?/p>

定義新類型實(shí)現(xiàn)枚舉

枚舉通常是一組相關(guān)的常量集合,Go?語言中有提供常量類型,所以我們可以使用常量來聲明枚舉,但也同樣會(huì)遇到上述的問題,起不到約束的作用,所以為了起到約束我們可以使用Go?語言另外一個(gè)知識(shí)點(diǎn) -- 類型定義,Go?語言中可以使用type?關(guān)鍵字定義不同的類型,我們可以為整型、浮點(diǎn)型、字符型等定義新的類型,新的類型與原類型轉(zhuǎn)換需要顯式轉(zhuǎn)換,這樣在一定程度上也起到了約束的作用,我們就可以用Go語言實(shí)現(xiàn)如下枚舉:

type OrderStatus int

const (
CREATE OrderStatus = iota + 1
PAID
DELIVERING
COMPLETED
CANCELLED
)

func main() {
a := 100
IsCreated(a)
}

上面的代碼就會(huì)報(bào)錯(cuò):

./main.go:19:12: cannot use a (variable of type int) as type OrderStatus in argument to IsCreated

定義新的類型可以起到約束作用,比如我們要檢查狀態(tài)機(jī),入?yún)⑾薅吮仨毷荗rderStatus類型,如果是int類型就會(huì)報(bào)錯(cuò)。

上面我們的枚舉實(shí)現(xiàn)方式只能獲取枚舉值,獲取不到其映射的字面意思,所以我們可以優(yōu)化一下,實(shí)現(xiàn)String方法,使用官方提供的cmd/string來快速實(shí)現(xiàn),代碼如下:

//go:generate stringer -type=OrderStatus
type OrderStatus int

const (
CREATE OrderStatus = iota + 1
PAID
DELIVERING
COMPLETED
CANCELLED
)

執(zhí)行命令go generate ./...生成orderstatus_string.go文件:

import "strconv"

func _() {
// An "invalid array index" compiler error signifies that the constant values have changed.
// Re-run the stringer command to generate them again.
var x [1]struct{}
_ = x[CREATE-1]
_ = x[PAID-2]
_ = x[DELIVERING-3]
_ = x[COMPLETED-4]
_ = x[CANCELLED-5]
}

const _OrderStatus_name = "CREATEPAIDDELIVERINGCOMPLETEDCANCELLED"

var _OrderStatus_index = [...]uint8{0, 6, 10, 20, 29, 38}

func (i OrderStatus) String() string {
i -= 1
if i < 0 || i >= OrderStatus(len(_OrderStatus_index)-1) {
return "OrderStatus(" + strconv.FormatInt(int64(i+1), 10) + ")"
}
return _OrderStatus_name[_OrderStatus_index[i]:_OrderStatus_index[i+1]]
}

protobuf中生成的枚舉代碼

Go語言使用protobuf會(huì)生成對(duì)應(yīng)的枚舉代碼,我們發(fā)現(xiàn)其中也是使用定義新的類型的方式來實(shí)現(xiàn)的,然后在封裝一些方法,我們來賞析一下protobuf生成的枚舉代碼:

const (
CREATED OrderStatus = 1
PAID OrderStatus = 2
CANCELED OrderStatus = 3
)

var OrderStatus_name = map[int32]string{
1: "CREATED",
2: "PAID",
3: "CANCELED",
}

var OrderStatus_value = map[string]int32{
"CREATED": 1,
"PAID": 2,
"CANCELED": 3,
}

func (x OrderStatus) Enum() *OrderStatus {
p := new(OrderStatus)
*p = x
return p
}

func (x OrderStatus) String() string {
return proto.EnumName(OrderStatus_name, int32(x))
}

func (x *OrderStatus) UnmarshalJSON(data []byte) error {
value, err := proto.UnmarshalJSONEnum(OrderStatus_value, data, "OrderStatus")
if err != nil {
return err
}
*x = OrderStatus(value)
return nil
}

總結(jié)

雖然Go語言沒有提供枚舉類型,但是我們也可以根據(jù)Go語言的兩個(gè)特性:常量和定義新類型來實(shí)現(xiàn)枚舉,方法總比困難多嗎,開源庫是優(yōu)秀的,我們往往可以從高手那里里學(xué)習(xí)很多,記住,請(qǐng)永遠(yuǎn)保持一個(gè)學(xué)徒之心。

責(zé)任編輯:武曉燕 來源: Golang夢(mèng)工廠
相關(guān)推薦

2022-04-13 08:20:32

DockerGo項(xiàng)目

2022-05-16 10:58:12

Go 項(xiàng)目Makefilemake

2021-11-29 09:45:57

枚舉Go代碼

2022-06-05 23:30:25

AES加密算法

2023-02-13 00:24:37

Go語言日志庫

2022-07-04 14:41:31

Go 語言變長參數(shù)變長參數(shù)函數(shù)

2024-04-01 00:02:56

Go語言代碼

2022-07-03 23:07:48

Go語言參數(shù)

2022-02-21 18:16:38

Go語言枚舉

2021-01-20 16:26:17

Go編程語言

2021-06-09 07:15:20

Go枚舉技巧

2022-11-06 23:17:23

Go語言項(xiàng)目

2025-06-09 01:22:00

Go版本管理器

2022-01-17 16:18:14

Go枚舉源碼

2023-01-16 00:12:20

Go語言Web

2024-11-06 09:23:32

2023-07-16 23:43:05

Go語言模式

2022-03-13 23:51:39

Web項(xiàng)目Go

2024-08-19 01:10:00

RedisGo代碼

2023-02-26 23:49:17

Go語言監(jiān)聽?zhēng)?/a>
點(diǎn)贊
收藏

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

久久久久久久久久99| 成人久久18免费网站漫画| 星空大象在线观看免费播放| 范冰冰一级做a爰片久久毛片| 久久亚洲春色中文字幕久久久| 国产福利成人在线| 69xx绿帽三人行| 欧洲vs亚洲vs国产| 欧美日韩国产精品成人| 国产精品素人视频| 91精品国产精品| 波多野在线播放| 国产精品一级在线观看| 亚洲444eee在线观看| 日韩精品另类天天更新| 精品人妻伦一二三区久久| 国产精品视频久久一区| 精品国产一区二区三区在线观看 | 一区二区三区福利| 最近中文字幕2019免费| 国产大学生视频| 成人h在线观看| 亚洲v日本v欧美v久久精品| 亚洲成色www久久网站| 欧美自拍第一页| 免费在线观看成人| 国内精品小视频在线观看| 能直接看的av| 亚洲黄页在线观看| 激情成人综合网| 精品露脸国产偷人在视频| 午夜精品一区二区在线观看的| 懂色av蜜臀av粉嫩av分享吧| 看片的网站亚洲| 欧美一区二区三区四区在线| 强乱中文字幕av一区乱码| 欧美午夜精品一区二区三区电影| 亚洲成人久久久久| 亚洲第一天堂久久| 激情欧美一区二区三区黑长吊| 精品日韩美女的视频高清| 爱爱爱视频网站| 春暖花开成人亚洲区| 成人精品鲁一区一区二区| 成人免费xxxxx在线观看| 欧美人一级淫片a免费播放| 亚洲精品看片| 欧美精品videos另类日本| 农村妇女精品一区二区| 日韩在线观看一区| 中文字幕欧美日韩va免费视频| 精品黑人一区二区三区观看时间| 日韩有吗在线观看| 日韩欧美在线不卡| 欧美精品久久久久久久久25p| 波多野结衣亚洲一二三| 精品人伦一区二区三区蜜桃免费| 亚洲电影av在线| 成人免费在线观看视频网站| 都市激情亚洲一区| 一本一道综合狠狠老| 激情深爱综合网| 麻豆网站免费在线观看| 精品久久久久久久久久久久| 久久99中文字幕| 18video性欧美19sex高清| 日本一本在线免费福利| av激情亚洲男人天堂| 国产精品日韩一区二区三区 | 在线播放日韩导航| 中文字幕在线综合| 国产激情精品一区二区三区| 欧美一级免费大片| 国产人妻精品午夜福利免费| 成人h动漫免费观看网站| 精品国产一二三| 精品少妇人妻av一区二区三区| 老司机成人在线| 亚洲老司机av| 日本污视频网站| 天堂美国久久| 久久久久久国产精品| 日韩精品手机在线| 奇米精品一区二区三区在线观看一| 国产精品亚洲视频在线观看| 国产理论片在线观看| 国产成人免费在线观看| 国产亚洲精品自在久久| 精华区一区二区三区| 国产精品国产三级国产专播品爱网| 熟妇熟女乱妇乱女网站| 波多野结依一区| 在线国产亚洲欧美| 麻豆传媒在线看| 日韩av三区| 最近2019中文字幕大全第二页| 欧美成人精品欧美一| 国产亚洲午夜| 国产一区视频在线| 日本xxxx人| 国产精品国产三级国产有无不卡| 久久99久久99精品| 国产精品99| 亚洲精品在线观| 黄色激情小视频| 在线免费观看欧美| 国产自产女人91一区在线观看| 日韩在线观看视频一区| 国产精品色呦呦| 欧美极品欧美精品欧美| 日韩综合av| 亚洲欧美国产另类| 九九免费精品视频| 久久国产日韩欧美精品| 精品一卡二卡三卡四卡日本乱码 | 国产婷婷色一区二区三区| 艳母动漫在线免费观看| 在线播放高清视频www| 日韩一区二区三| 中文字幕 自拍| 亚洲无毛电影| 91香蕉电影院| 成人在线观看免费| 亚洲成a人v欧美综合天堂下载| 日韩在线不卡一区| 精品在线播放| 国外成人在线播放| 性一交一乱一伧老太| 国产精品美女久久久久久久久久久 | 最新天堂中文在线| 在线看成人短视频| 久久久久久久久久av| 99久久精品国产色欲| 日本一区二区三区高清不卡| heyzo国产| 久久精品国产亚洲5555| 欧美人与性动交| 一级特黄色大片| 国产色一区二区| 欧美日韩第二页| 免费看久久久| 久久人人爽人人爽人人片av高请| 国产www免费观看| 综合av第一页| 亚洲欧美手机在线| 欧美hentaied在线观看| 国产精品一区二区三区久久| 国产精品二线| 91久久精品一区二区三区| 亚洲天堂久久新| 老司机午夜免费精品视频| 蜜桃传媒视频麻豆一区 | 久草福利在线观看| 一个色综合网| 国产又猛又黄的视频| 麻豆免费在线视频| 欧美日韩国产综合视频在线观看 | 91美女在线视频| 毛片在线视频播放| 免费看久久久| 欧美怡红院视频一区二区三区| 熟妇高潮一区二区三区| 欧美日韩综合视频| 成人免费毛片糖心| 老牛影视一区二区三区| 欧美亚洲免费高清在线观看 | 国产一区二区视频在线观看| 在线观看麻豆蜜桃| 欧美美女一区二区三区| 日韩极品视频在线观看 | 亚洲一区二区三区影院| 在线观看亚洲免费视频| 伊人久久亚洲热| 精品中文字幕一区| 巨茎人妖videos另类| 国产小视频国产精品| 在线观看国产成人| 136国产福利精品导航| 国产成人精品综合久久久久99 | 91免费视频观看| 国模杨依粉嫩蝴蝶150p| 日韩成人精品一区| 国产噜噜噜噜噜久久久久久久久| 黄色av免费在线| 精品黑人一区二区三区久久| a v视频在线观看| 久久精品视频在线看| 福利在线一区二区三区| 亚洲精品一二三区区别| 成人女人免费毛片| 久久天堂av| 蜜臀久久99精品久久久久久宅男 | 亚洲视频国产视频| 国产伦子伦对白视频| 亚洲成a人v欧美综合天堂| 美女洗澡无遮挡| 国产乱码精品一区二区三| 亚洲 自拍 另类小说综合图区| 欧美猛男男男激情videos| 成人午夜高潮视频| 二区三区不卡| 欧美日本中文字幕| 国产一二三区在线视频| 日韩一区二区精品葵司在线| 国产婷婷色一区二区在线观看 | 翔田千里亚洲一二三区| 一区中文字幕| 国产精品劲爆视频| 视频在线这里都是精品| 中文字幕欧美视频在线| 日韩一区免费视频| 91麻豆精品国产91久久久| 毛片基地在线观看| 亚洲精品久久嫩草网站秘色| 97人妻人人揉人人躁人人| 国产成人一区二区精品非洲| 激情五月亚洲色图| 亚洲精品社区| 裸体裸乳免费看| 欧美精选视频在线观看| 国产欧美丝袜| 欧美另类中文字幕| 国产精品久久久久99| freexxx性亚洲精品| 久久久精品视频成人| 九色视频在线播放| 亚洲精品国产精品乱码不99按摩| 国产又粗又长又黄| 欧美中文字幕一区| 国产免费av一区二区| 一区二区三区四区蜜桃| 亚洲 欧美 国产 另类| 久久精品一二三| 在线天堂www在线国语对白| 国产精品亚洲一区二区三区在线 | 国产91精品久久久久久久网曝门| 色噜噜狠狠永久免费| 久热精品在线| 日本wwww视频| 亚洲一区二区伦理| 欧美一级视频免费看| 伊人激情综合| bt天堂新版中文在线地址| 伊人久久大香线| 伊人久久青草| 婷婷综合视频| 异国色恋浪漫潭| 国产精品福利在线观看播放| 亚洲精品日韩精品| 青青草91久久久久久久久| 任我爽在线视频精品一| 欧美精品久久久久久| 亚洲mv在线看| 成人羞羞网站| 伊人久久大香线蕉综合75| 水蜜桃精品av一区二区| 一区一区视频| 女生裸体视频一区二区三区| 麻豆传媒网站在线观看| 中文字幕一区二区三区乱码图片 | 成人免费看aa片| 久久午夜老司机| 无码人妻精品一区二区中文| 国产无遮挡一区二区三区毛片日本| 好吊视频在线观看| 国产精品美女久久久久久久久 | 欧美色播在线播放| 在线精品免费视| 欧美性猛交xxxx黑人交| 国产剧情久久久| 精品国产凹凸成av人导航| 无码国产精品96久久久久| 日韩精品免费一线在线观看| 免费在线观看污视频| 在线精品国产欧美| 秋霞午夜理伦电影在线观看| 久久精品久久久久久国产 免费| av网站免费在线观看| 欧美精品成人在线| 免费观看成人性生生活片| 国产欧美日韩精品在线观看| 玖玖玖电影综合影院| 国产另类自拍| 精品国产中文字幕第一页| 香蕉视频在线网址| 影音先锋日韩资源| 搡女人真爽免费午夜网站| 国产在线麻豆精品观看| 亚洲av成人精品一区二区三区 | 欧美xxxooo| 亚洲国产裸拍裸体视频在线观看乱了| 国产区一区二区三| 欧美精品日日鲁夜夜添| 欧美熟妇交换久久久久久分类| 亚洲天堂av网| 91精品久久久| 日韩美女中文字幕| 日本在线视频一区二区三区| 狼狼综合久久久久综合网| 天天射综合网视频| 免费无码不卡视频在线观看| 蜜桃视频在线一区| 国产麻豆xxxvideo实拍| 国产精品国产自产拍高清av王其| 中文字幕在线观看免费视频| 欧美理论片在线| 三级做a全过程在线观看| 久久综合久久美利坚合众国| 中文字幕在线视频久| 7777奇米亚洲综合久久| 成人精品天堂一区二区三区| 精品少妇人妻av免费久久洗澡| 另类欧美日韩国产在线| 黄色在线观看av| 亚洲一区二区三区中文字幕在线| 免费在线观看av的网站| 亚洲国产精品嫩草影院久久| 国产黄大片在线观看画质优化| 日本伊人精品一区二区三区介绍 | 日韩电影一区二区三区四区| 精品国产aⅴ一区二区三区东京热| 国产精品嫩草影院com| 欧美日韩精品区| 精品国产伦一区二区三区免费| 麻豆网站在线看| 国产精品99导航| 亚洲精品白浆高清| 久在线观看视频| 国产**成人网毛片九色 | 欧美国产高潮xxxx1819| 好男人www社区| 久久天堂av综合合色蜜桃网| 国产一二三四在线| 日韩欧美国产综合在线一区二区三区| 中文字幕在线视频区| 日本欧美黄网站| 牛牛影视久久网| 131美女爱做视频| 国产69精品久久久久777| 亚洲天堂黄色片| 91精品国产色综合久久ai换脸| 91caoporm在线视频| 国产精品高精视频免费| 一区二区三区日本久久久| 欧美精品99久久| 91老师国产黑色丝袜在线| 国产 日韩 欧美 在线| 日韩电影在线观看永久视频免费网站| 久久99亚洲网美利坚合众国| 成人性色av| 亚洲第一毛片| 亚洲成av人片在线观看无| 亚洲成人午夜电影| 熟妇人妻一区二区三区四区| 97av在线视频| 你微笑时很美电视剧整集高清不卡| 黄色一级视频在线播放| 91在线播放网址| 无码人妻久久一区二区三区不卡| 亚洲色无码播放| 亚洲成人va| 伊人久久av导航| 国产精品一区久久久久| 久久9999久久免费精品国产| 亚洲精品97久久| 芒果视频成人app| 日韩欧美亚洲v片| 激情五月激情综合网| 妺妺窝人体色www婷婷| 亚洲第一区第一页| 2022成人影院| 一区二区三区偷拍| 国产精品99久| 天天操天天操天天操天天| 亚洲天堂免费在线| 亚洲一区导航| 人妻久久久一区二区三区| 久久精品欧美日韩精品| 一级做a爰片久久毛片16| 久久成人在线视频| 久久精品国产亚洲5555| 免费一级特黄录像| 亚洲天堂2016| 亚洲 欧美 激情 另类| 国产精品免费网站| 亚洲特色特黄| 国产高清一区二区三区四区| 91麻豆精品久久久久蜜臀| 18video性欧美19sex高清| 性欧美精品一区二区三区在线播放 | 国产高清视频免费| 欧亚精品中文字幕| 国产精品久久久久无码av| 这里只有精品在线观看视频| 精品视频123区在线观看| 欧美1234区| 亚洲一区二区在线观| 成人爱爱电影网址| 在线观看国产精品视频| 海角国产乱辈乱精品视频|