文章出處

在c#、java等高級語言中,經常會用到枚舉類型來表示狀態等。在golang中并沒有枚舉類型,如何實現枚舉呢?首先從枚舉的概念入手。

1、枚舉類型定義

    從百度百科查詢解釋如下:http://baike.baidu.com/link?url=Lrq57-YIZJ35grERvdg2kh7lfGfxvvLCVsNBMAqjBUOQX3CJUYnJp-9oZ2-rf3JGMqL3e4RbnSRQWs_5nmaI6K

    枚舉類型在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特性進行枚舉類型的定義:

image

    測試輸出如下:

7_T9%2}S6%SBW187F[]HAOW

    枚舉類型使用步驟:

  • 聲明枚舉類型
  • 定義枚舉變量
  • 使用枚舉變量

    注意:從golang枚舉類型定義來看,變量enum也可以為99等其他int類型。從這個方面來看,golang定義的枚舉類型比較廣泛。如下圖:

image

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,可行嗎?答案是完全行的通的,修訂枚舉定義格式:

image

測試結果如下:

image

3.4 枚舉類型定義二

    3.1是一種實現方式,由于iota還可以與表達式一起是使用,所以可以簡化定義,如下:

image

    測試如下:

image

    與預期一樣。

3.5 總結

    使用iota可以試下golang枚舉類型的定義。但golang的枚舉類型并不是嚴格意義上的枚舉類型,要認識到這點。


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()