每天三分鐘,知識更輕鬆。
歡迎關注同名微信公眾賬號極客24h。
什麼是enum(枚舉)?
枚舉將相關常數歸為一種類型。
例子
我們為什麼需要枚舉
- 分組獲取內容相關得值
- 避免使用無效值
- 提高代碼的可讀性和可維護性
Golang 語言中如何創建枚舉 。
例如,假設您要為工作日創建一個枚舉。
★ 第一步:聲明一個新的自定義類型:Weekday
type Weekday int
★ 第二步:為Weekday 聲明相關常量
給他們賦予不同數值,以防衝突。
const (
Sunday Weekday = 0
Monday Weekday = 1
Tuesday Weekday = 2
Wednesday Weekday = 3
Thursday Weekday = 4
Friday Weekday = 5
Saturday Weekday = 6
)
fmt.Println(Sunday) // prints 0
fmt.Println(Saturday) // prints 6
為枚舉Weekday 創建共同行為
您將方法附加到類型以定義其行為。
附加的方法將是Weekday的不可分割的部分,並在Weekday常量之間共享。
★ String() method:
func (day Weekday) String() string {
// declare an array of strings
// ... operator counts how many
// items in the array (7)
names := [...]string{
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"}
// → `day`: It's one of the
// values of Weekday constants.
// If the constant is Sunday,
// then day is 0.
//
// prevent panicking in case of
// `day` is out of range of Weekday
if day < Sunday || day > Saturday {
return "Unknown"
}
// return the name of a Weekday
// constant from the names array
// above.
return names[day]
}
★ 測試
fmt.Printf("Which day it is? %s\\n", Sunday)
// Which day it is? Sunday
★ Weekend() method:
func (day Weekday) Weekend() bool {
switch day {
case Sunday, Saturday: // If day is a weekend day
return true
default: // If day is not a weekend day
return false
}
}
★ 測試
fmt.Printf("Is Saturday a weekend day? %t\\n", Saturday.Weekend())
// Is Saturday a weekend day? true
如何使用iota
其他常量將重複Iota表達式,直到出現另一個賦值或類型聲明。
我們來試一些小技巧
除了空行和註釋行,iota每行之後都增加1。
什麼時候不用iota
//server status
const (
RestartMarkerReply = 110
ServiceReadyInNMinutes = 120
CommandOK = 200
CommandNotImplemented = 202
// ...
)
這部分會提高你對iota 得理解和認識,具體請看下回。
閱讀更多 極客24h 的文章