這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
在c#、java等進階語言中,經常會用到枚舉類型來表示狀態等。在golang中並沒有枚舉類型,如何?枚舉呢?首先從枚舉的概念入手。
1、枚舉類型定義
從百度百科查詢解釋如下:http://baike.baidu.com/link?url=Lrq57-YIZJ35grERvdg2kh7lfGfxvvLCVsNBMAqjBUOQX3CJUYnJp-9oZ2-rf3JGMqL3e4RbnSRQWs_5nmaI6K
枚舉類型在C#或C++,java,VB等一些電腦程式設計語言中是一種基礎資料型別 (Elementary Data Type)而不是構造資料類型,而在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的枚舉類型並不是嚴格意義上的枚舉類型,要認識到這點。