Enum Implementation Go vs Python
前言 enum其實是enumeration的縮寫,讓使用者自己定義data type而避免定義一大堆固定的常數,通常用來定義一群相關的屬性,上禮拜在公司資深工程師提到golang如何實現enum的寫法,之前只有透過使用python的enum套件,沒看過用Go來實作覺得很有趣,因此想寫篇文章做個簡單的紀錄,此文會先用python說明沒有使用enum的缺點,再透過enum套件實作enum,最後再用Go實踐。 Python簡單範例 在公司開發的應用程式需要針對k8s的資源做操作,這裡用一個比較簡單沒有使用enum的寫法 # 定義常數 DEPLOYMENT = "Deployment" STATEFULSET = "Statefulset" DAEMONSET = "Daemonset" def handle_resource(resource: str) -> None: if resource == DEPLOYMENT: print("處理資源:Deployment") elif resource == STATEFULSET: print("處理資源:Statefulset") elif resource == DAEMONSET: print("處理資源:Daemonset") else: print("未知的資源類型") resource = "statefulset" handle_resource(resource) 可以看到如果沒使用enum直接定義常數,主要可能會有三個問題 缺乏類型安全,當傳入的變數是resource = "statefulset",因為第一個字沒有大寫我就會印出未知的資源,要在執行程式碼的時候才會發現錯誤 IDE不支援自動補齊的功能,當在resource=要輸入值時,IDE不會知道可能要填什麼 常數散落在global空間,如果其他地方需要已定義的常數可能會發生衝突 from enum import Enum class ResourceType(Enum): DEPLOYMENT = "Deployment" STATEFULSET = "Statefulset" DAEMONSET = "Daemonset" def handle_resource(resource: ResourceType) -> None: if resource == ResourceType....