列舉型別enum用法 Golang 列舉使用

2021-10-11 20:09:46 字數 3021 閱讀 9588

go 語言沒有enum關鍵字的,通過使用const&iota可以實現列舉的能力。本篇文章將**幾個問題:

為什麼要使用列舉,沒了它就不行嘛?

如何在 go 語言中優雅的使用列舉。

stackoverflow 上有個問題 what are enums and why are they useful? 中的回答很具備說服力。

當使用列舉去替代整數時,執行時會去檢查傳入的引數是否是合法引數(是否在定義的列舉集合當中),避免錯誤的傳入了乙個不可用的常量。

舉例來講,第一種實現,通過文件來備註每個數字的含義:

/** counts number of foobangs.

* @param type type of foobangs to count. can be 1=green foobangs,

* 2=wrinkled foobangs, 3=sweet foobangs, 0=all types.

* @return number of foobangs of type

*/public int countfoobangs(int type)

呼叫該方法的時候:

int sweetfoobangcount = countfoobangs(3);

通過文件來備註每種狀態的數字代號這種方案,在大型開發中著實是讓人頭疼的,況且並不見得文件中寫的和**中實際是一致的。人員流動交接常常會遺漏許多東西,慢慢的誰都不願意再來維護這個專案。但使用列舉來實現的話,就變得清晰易懂,且避免了出錯。

/** types of foobangs. */

public enum fb_type

/** counts number of foobangs.

* @param type type of foobangs to count

* @return number of foobangs of type

*/public int countfoobangs(fb_type type)

呼叫方法的時候:

int sweetfoobangcount = countfoobangs(fb_type.sweet);

這種方案就很清晰,**自帶說明性,開發 & 維護起來都很方便。

如開篇所言,go 語言中沒有enum型別,但我們可以通過const&iota來實現。go 原始碼中有一段就是很好的示例**。使用步驟如下:

定義列舉型別

設定該列舉型別的可選值集合,可以借助iota的能力來簡化賦值流程

type filemode uint32

const (

// the single letters are the abbreviations

// used by the string method's formatting.

modedir filemode = 1 << (32 - 1 - iota) // d: is a directory

modeexclusive // l: exclusive use

modetemporary // t: temporary file; plan 9 only

modesymlink // l: symbolic link

modedevice // d: device file

modenamedpipe // p: named pipe (fifo)

modesocket // s: unix domain socket

modesetuid // u: setuid

modesetgid // g: setgid

modechardevice // c: unix character device, when modedevice is set

modesticky // t: sticky

modeirregular // ?: non-regular file; nothing else is known about this file

// mask for the type bits. for regular files, none will be set.

modetype = modedir | modesymlink | modenamedpipe | modesocket | modedevice | modechardevice | modeirregular

modeperm filemode = 0777 // unix permission bits

)

最後再著重說一下iota的用法。

iota代表了乙個連續的整形常量,0,1,2,3 ...

iota將會被重置為 0 ,當再一次和const搭配使用的時候

iota所定義的值型別為int,它會在每次賦值給乙個常量後自增

enum列舉型別用法

2.列舉變數和列舉常量的關聯對應 3.列舉型別和變數的應用 4.總結 5.參考資料 在實際的程式設計應用中,有的變數只有幾種可能的取值,譬如說乙個家族的幾個成員,性別的兩種可能等等。c 為這種型別的變數的定義提供了enum關鍵字。要使用列舉型別的變數,首先需要先定義乙個列舉型別名,再宣告變數是該列舉...

列舉型別(enum)

enum 是計算機程式語言中的一種資料型別 列舉型別。應用場景 有些變數的取值被要求在乙個確定的範圍內,例如一周有 7天,一年 12個月,或者使用者自定義的今天安排要學習的百家姓有 4個等等。定義 在列舉型別的定義中列舉出所有的可能取值,該變數的取值只能是所列舉的範圍。格式 enum 列舉名 enu...

enum列舉型別。

列舉 定義常量符號,就是巨集定義常數的集合體 比如 四季,星期,意義相關的常數 狀態機 1 根據當前狀態,這個週期結束,就成了下乙個狀態。2 根據你的當前狀態,還和你的輸入有關。比如 fpga,gui 通過列舉,可以將一些常量賦值給某些固定的字串常量。可以通過改變列舉型別的狀態來達到自己的一些目的。...