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 通過列舉,可以將一些常量賦值給某些固定的字串常量。可以通過改變列舉型別的狀態來達到自己的一些目的。...