您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Golang枚舉類型的基礎(chǔ)用法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Golang枚舉類型的基礎(chǔ)用法”吧!
為了下面講解方便,這里使用 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
以 啟動、運(yùn)行中、停止 這三個狀態(tài)為例,使用 const 關(guān)鍵來聲明一系列的常量值。在 enum.go 中寫上以下內(nèi)容:
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) }
保存并運(yùn)行,可以得到以下結(jié)果,
~/Projects/go/examples/enum ? go run enum.go State running: 0 State pending: 1 State Stoped: 2
在說明發(fā)生了什么之前,我們先看來一件東西,iota。相比于 c、java,go 中提供了一個常量計數(shù)器,iota,它使用在聲明常量時為常量連續(xù)賦值。
比如這個例子,
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
設(shè)想一下,如果此時有 50 或者 100 個常量數(shù),在 c 和 java 語言中寫出來會是什么情況。
關(guān)于 iota,有更多的具體的技巧(例如跳數(shù)),詳細(xì)請看官方定義 iota。
通過使用 const 來定義一連串的常量,并借助 iota 常量計數(shù)器,來快速的為數(shù)值類型的常量連續(xù)賦值,非常方便。雖然沒有了 enum 關(guān)鍵字,在這種情況下發(fā)現(xiàn),是多余的,枚舉本質(zhì)上就是常量的組合。
當(dāng)然,你可以使用以下方式,來更接近其它語言的 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 函數(shù),運(yùn)行結(jié)果如下:
~/Projects/go/examples/enum ? go run enum.go State running: Running State pending: Pending State Stoped: Stopped
到此,相信大家對“Golang枚舉類型的基礎(chǔ)用法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。