婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Golang表示枚舉類型的詳細講解

Golang表示枚舉類型的詳細講解

熱門標簽:上海企業外呼系統排名 如何利用高德地圖標注家 開通400電話申請流程 智能語音電銷的機器人 百度地圖標注位置網站 400手機電話免費辦理 電腦外呼系統輻射大嗎 武漢百應人工智能電銷機器人 揚州電銷外呼系統軟件

枚舉,是一種重要的數據類型,由一組鍵值對組成,通常用來在編程語言中充當常量的標識符。在主流行編程語言如 c、 java 等,都有原生支持。在 go 中,大家卻找不到 enum 或者其它直接用來聲明枚舉類型的關鍵字。從熟悉其它編程語言的開發者轉用 go 編程,剛開始會比較難接受這種情況。其實,如果你看到如何在 go 中表示枚舉類型時,可能會感受到 go 語言設計者對簡潔性、問題考慮的深度,是一般資淺工程師無法比擬的。

其實,在 go 語言設計者的眼里,enum 本質是常量,為什么要多余一個關鍵字呢?在 go 只是沒有 enum 關鍵字而已,其表現枚舉的形式,與其它語言別無太大區別。下面來看看如果在 go 中表示枚舉。

學習、使用一門語言,是學習、理解語言本身的設計哲學,同時也會感受到設計者的性格特點。

基礎工作 

為了下面講解方便,這里使用 go modules 的方式先建立一個簡單工程。

~/Projects/go/examples  
➜  mkdir enum  
~/Projects/go/examples  
➜  cd enum  
~/Projects/go/examples/enum  
➜  go mod init enum  
go: creating new go.mod: module enum  
~/Projects/go/examples/enum  
➜  touch enum.go 

const + iota

以 啟動、運行中、停止 這三個狀態為例,使用 const 關鍵來聲明一系列的常量值。在 enum.go 中寫上以下內容:

package main  
import "fmt"  
const (  
    Running int = iota  
    Pending  
    Stopped  
)  
func main() {  
    fmt.Println("State running: ", Running)  
    fmt.Println("State pending: ", Pending)  
    fmt.Println("State Stoped: ", Stopped)  
} 

保存并運行,可以得到以下結果,

~/Projects/go/examples/enum   
➜  go run enum.go  
State running:  0  
State pending:  1  
State Stoped:  2 

在說明發生了什么之前,我們先看來一件東西,iota。相比于 c、java,go 中提供了一個常量計數器,iota,它使用在聲明常量時為常量連續賦值。

比如這個例子,

const (  
    a int = iota // a = 0  
    b int = iota // b = 1  
    c int = iota // c = 2  
)  
const d int = iota // d = 0 

在一個 const 聲明塊中,iota 的初始值為 0,每聲明一個變量,自增 1。以上的代碼可以簡化成:

const (  
    a int = iota // a = 0  
    b // b = 1  
    c // c = 2  
)  
const d int = iota // d = 0 

設想一下,如果此時有 50 或者 100 個常量數,在 c 和 java 語言中寫出來會是什么情況。

關于 iota,有更多的具體的技巧(例如跳數),詳細請看官方定義 iota。

通過使用 const 來定義一連串的常量,并借助 iota 常量計數器,來快速的為數值類型的常量連續賦值,非常方便。雖然沒有了 enum 關鍵字,在這種情況下發現,是多余的,枚舉本質上就是常量的組合。

當然,你可以使用以下方式,來更接近其它語言的 enum,

// enum.go  
...  
type State int  
const (  
    Running State = iota  
    Pending  
    Stopped  
)  
... 

把一組常量值,使用一個類型別名包裹起來,是不是更像其它語言中的 enum {} 定義了呢?

你還可以將上面的例子改為:

// enum.go  
...  
type State int 
const (  
    Running State = iota  
    Pending  
    Stopped  
)  
func (s State) String() string {  
    switch s {  
    case Running:  
        return "Running"  
    case Pending:  
        return "Pending"  
    case Stopped:  
        return "Stopped"  
    default:  
        return "Unknown" 
     }  
}  
... 

為定義的枚舉類型加上 String 函數,運行結果如下:

~/Projects/go/examples/enum   
➜  go run enum.go  
State running:  Running  
State pending:  Pending  
State Stoped:  Stopped 

是不是很魔幻,思路一下又開闊一些,長見識了。把實際的值與打印字符分開,一般語言設計者不會想到。看到這里,有沒有這種的感覺,go 語言的設計者并不是偷懶,而是為了可以偷懶想了很多、做了很多。

到此這篇關于Golang表示枚舉類型的詳細講解的文章就介紹到這了,更多相關Golang 枚舉類型內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Go 第三方庫之類型轉換問題
  • Pandas數據類型之category的用法
  • golang如何獲得一個變量的類型
  • Golang斷言判斷值類型的實現方法
  • MongoDB 常用的數據類型和基本操作

標簽:武漢 黑龍江 嘉峪關 宜賓 延邊 張掖 新余 江西

巨人網絡通訊聲明:本文標題《Golang表示枚舉類型的詳細講解》,本文關鍵詞  Golang,表示,枚舉,類型,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Golang表示枚舉類型的詳細講解》相關的同類信息!
  • 本頁收集關于Golang表示枚舉類型的詳細講解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 本溪| 兴海县| 凉山| 荥阳市| 防城港市| 陆河县| 吉水县| 卢龙县| 商河县| 团风县| 大余县| 固镇县| 克拉玛依市| 沁源县| 绿春县| 山阳县| 合作市| 巴东县| 宁都县| 义马市| 东海县| 延安市| 桂阳县| 天气| 永泰县| 屏东市| 廉江市| 徐汇区| 南川市| 德清县| 巨野县| 宿松县| 黎城县| 射洪县| 新民市| 大名县| 民权县| 常宁市| 新源县| 郓城县| 慈利县|