【程式語言 — Go】如何實做Enum?

Han
阿Han的圖文解字筆記
Oct 28, 2020

由於Go語言本身沒有提供Enum的功能, 故我們可以使用package及type的技巧來達到類似的功能,假設今天要定義季節的enum型別, 包含了「春、夏、秋、冬」四種值的時候,可以怎麼做呢?

圖片來源

首先我們可以用package來框住season的範圍:

season
|- season.go

然而在season.go可以定義一個字串的類型

package season
type Season string

最後再用四個變數來描述四種不同季節的key值

package season
type Season string
const (
Spring Season = "春天"
Summer Season = "夏天"
Autumn Season = "秋天"
Winter Season = "冬天"
)

如此一來外部可以這樣使用

package mainimport (
"season"
)
main() {
fmt.Println(season.Spring) // 春天
input := "秋天"
fmt.Println(season.Autumn == input) // true
}

除此之外我們可以將enum運用在這些生活案例之上:

  1. 交通信號燈:假設你正在開發一個交通控制系統的軟體,你可以使用enum定義一個TrafficSignal(交通信號燈)的型別,包含紅燈、黃燈和綠燈這三個可能的狀態。這樣,你可以在程式中使用TrafficSignal.RedTrafficSignal.YellowTrafficSignal.Green來表示不同的交通信號燈狀態。
  2. 一周的天數:假設你需要在程式中處理一周的天數,你可以使用enum來定義一個Weekday(星期幾)的型別,包含週一到週日這七個可能的選項。這樣,在程式中你可以使用Weekday.MondayWeekday.Tuesday等來表示不同的星期幾。
  3. 服裝尺寸:如果你正在開發一個電子商務網站,你可能需要處理不同的服裝尺寸。你可以使用enum定義一個Size(尺寸)的型別,包含小、中、大等不同的尺寸選項。這樣,你可以在程式中使用Size.SmallSize.MediumSize.Large來表示不同的尺寸。

結語

這次的分享主要針對Go不足的特性提供一個替代的可行方案,目的是讓我們的程式碼更加明確,定義好一連串的約束規格,讓我們僅能依照規格內開放的定義值進行操作,減少不可控的因素導致系統崩潰,我想這種概念不論是程式語言,甚至公司、政府、小到我們個人都能夠使用的一個小技巧,讓我們結合程式與生活,相輔相成吧!

--

--