由於Go語言本身沒有提供Enum的功能, 故我們可以使用package及type的技巧來達到類似的功能,假設今天要定義季節的enum型別, 包含了「春、夏、秋、冬」四種值的時候,可以怎麼做呢?
首先我們可以用package來框住season的範圍:
season
|- season.go
然而在season.go可以定義一個字串的類型
package season
type Season string
最後再用四個變數來描述四種不同季節的key值
package season
type Season stringconst (
Spring Season = "春天"
Summer Season = "夏天"
Autumn Season = "秋天"
Winter Season = "冬天"
)
如此一來外部可以這樣使用
package mainimport (
"season"
)main() {
fmt.Println(season.Spring) // 春天
input := "秋天"
fmt.Println(season.Autumn == input) // true
}
除此之外我們可以將enum運用在這些生活案例之上:
- 交通信號燈:假設你正在開發一個交通控制系統的軟體,你可以使用enum定義一個TrafficSignal(交通信號燈)的型別,包含紅燈、黃燈和綠燈這三個可能的狀態。這樣,你可以在程式中使用TrafficSignal.Red、TrafficSignal.Yellow和TrafficSignal.Green來表示不同的交通信號燈狀態。
- 一周的天數:假設你需要在程式中處理一周的天數,你可以使用enum來定義一個Weekday(星期幾)的型別,包含週一到週日這七個可能的選項。這樣,在程式中你可以使用Weekday.Monday、Weekday.Tuesday等來表示不同的星期幾。
- 服裝尺寸:如果你正在開發一個電子商務網站,你可能需要處理不同的服裝尺寸。你可以使用enum定義一個Size(尺寸)的型別,包含小、中、大等不同的尺寸選項。這樣,你可以在程式中使用Size.Small、Size.Medium和Size.Large來表示不同的尺寸。
結語
這次的分享主要針對Go不足的特性提供一個替代的可行方案,目的是讓我們的程式碼更加明確,定義好一連串的約束規格,讓我們僅能依照規格內開放的定義值進行操作,減少不可控的因素導致系統崩潰,我想這種概念不論是程式語言,甚至公司、政府、小到我們個人都能夠使用的一個小技巧,讓我們結合程式與生活,相輔相成吧!