在c#、java等高級語言中,經常會用到枚舉類型來表示狀態等。在golang中并沒有枚舉類型,如何實現枚舉呢?首先從枚舉的概念入手。
1、枚舉類型定義
枚舉類型在C#或C++,java,VB等一些計算機編程語言中是一種基本數據類型而不是構造數據類型,而在C語言等計算機編程語言中是一種構造數據類型。它用于聲明一組命名的常數,當一個變量有幾種可能的取值時,可以將它定義為枚舉類型。
枚舉可以根據Integer、Long、Short或Byte中的任意一種數據類型來創建一種新型變量。這種變量能設置為已經定義的一組之中的一個,有效地防止用戶提供無效值。該變量可使代碼更加清晰,因為它可以描述特定的值。
從上面知道:是一組命名的常數,常量值可以是連續的,也可以是斷續的。比較正規的理解如下:
在程序設計中,有時會用到由若干個有限數據元素組成的集合,如一周內的星期一到星期日七個數據元素組成的集合,由三種顏色紅、黃、綠組成的集合,一個工作班組內十個職工組成的集合等等,程序中某個變量取值僅限于集合中的元素。此時,可將這些數據集合定義為枚舉類型。因此,枚舉類型是某類數據可能取值的集合,如一周內星期可能取值的集合為:
{ Sun,Mon,Tue,Wed,Thu,Fri,Sat}
該集合可定義為描述星期的枚舉類型,該枚舉類型共有七個元素,因而用枚舉類型定義的枚舉變量只能取集合中的某一元素值。由于枚舉類型是導出數據類型,因此,必須先定義枚舉類型,然后再用枚舉類型定義枚舉型變量。
2、枚舉類型注意事項
使用枚舉類型要從以下方面考慮:
1、枚舉概念:查看《1、枚舉類型定義》
2、枚舉成員:用于聲明新的枚舉類型。是該枚舉類型的命名常數。任意兩個枚舉成員不能具有相同的名稱。每個枚舉成員均具有相關聯的常數值。此值的類型就是枚舉的基礎類型。每個枚舉成員的常數值必須在該枚舉的基礎類型的范圍之內。
3、枚舉成員默認值:在枚舉類型中聲明的第一個枚舉成員它的默值為零。
4、枚舉成員顯示賦值:允許多個枚舉成員有相同的值。沒有顯示賦值的枚舉成員的值,總是前一個枚舉成員的值+1。
5、枚舉類型與基礎類型的轉換
3、GOLANG枚舉類型實現
3.1 枚舉類型實現
查看2.4,可根據iota特性進行枚舉類型的定義:
測試輸出如下:
枚舉類型使用步驟:
- 聲明枚舉類型
- 定義枚舉變量
- 使用枚舉變量
注意:從golang枚舉類型定義來看,變量enum也可以為99等其他int類型。從這個方面來看,golang定義的枚舉類型比較廣泛。如下圖:
3.2 iota的優勢
從3.1來看golang的枚舉類型實現也是比較簡單的,利用iota的遞增規則進行編程。
iota的使用規則,詳情查看《golang 使用 iota》。
3.3 如何使用多個iota
3.1中定義的枚舉類型對應的值Success=1、Failed=2、DuplicateEvent=3、DuplicateCommand=4,是按照iota遞增規則進行的,加入要試下Success=1、Failed=2、DuplicateEvent=0、DuplicateCommand=1,可行嗎?答案是完全行的通的,修訂枚舉定義格式:
測試結果如下:
3.4 枚舉類型定義二
3.1是一種實現方式,由于iota還可以與表達式一起是使用,所以可以簡化定義,如下:
測試如下:
與預期一樣。
3.5 總結
使用iota可以試下golang枚舉類型的定義。但golang的枚舉類型并不是嚴格意義上的枚舉類型,要認識到這點。
文章列表