網站首頁 編程語言 正文
go語言支持語法自己實現枚舉類型
我們都知道go語言沒有原生的枚舉類型,但是做業務開發有些時候沒有枚舉類型確實不方便前后端聯調。我們可以通過go語言支持的語法自己實現枚舉類型。請看以下示例代碼和注釋說明:
// 首先定義一個int類型別名,新類型名稱就是枚舉類型名稱 type KeyboardLayout int // 然后定義若干常量,作為枚舉值 // 第一個常量是默認值 const ( UNKNOWN KeyboardLayout = iota QWERTZ AZERTY QWERTY ) // 再定義setter方法將傳入字符串類型枚舉值轉成上面定義的常量 func (k *KeyboardLayout) StringSetter(value string) { switch value { case "UNKNOWN": *k = UNKNOWN case "QWERTY": *k = QWERTY case "QWERTZ": *k = QWERTZ case "AZERTY": *k = AZERTY default: *k = UNKNOWN } } // 有setter自然就有getter func (k *KeyboardLayout) StringGetter() string { switch *k { case UNKNOWN: return "UNKNOWN" case QWERTY: return "QWERTY" case QWERTZ: return "QWERTZ" case AZERTY: return "AZERTY" default: return "UNKNOWN" } } // 最后再定義一組UnmarshalJSON和MarshalJSON方法 // UnmarshalJSON用于json反序列化 func (k *KeyboardLayout) UnmarshalJSON(bytes []byte) error { var _k string err := json.Unmarshal(bytes, &_k) if err != nil { return err } k.StringSetter(_k) return nil } // MarshalJSON用于json序列化 func (k KeyboardLayout) MarshalJSON() ([]byte, error) { return json.Marshal(k.StringGetter()) }
定義以后就可以直接用作結構體的屬性類型或是接口請求參數類型。
結構體類型示例
type Keyboard struct { Layout KeyboardLayout `json:"layout,omitempty"` Backlit bool `json:"backlit,omitempty"` }
接口請求參數示例
type EnumDemo interface { GetKeyboard(ctx context.Context, layout vo.KeyboardLayout) (data string, err error) GetKeyboard2(ctx context.Context, layout *vo.KeyboardLayout) (data string, err error) GetKeyboards(ctx context.Context, layout []vo.KeyboardLayout) (data []string, err error) GetKeyboards2(ctx context.Context, layout *[]vo.KeyboardLayout) (data []string, err error) GetKeyboards5(ctx context.Context, layout ...vo.KeyboardLayout) (data []string, err error) Keyboard(ctx context.Context, keyboard vo.Keyboard) (data string, err error) }
完整示例代碼:github.com/unionj-clou…
關于go-doudou的更多特性和用法請參考官方文檔:go-doudou.unionj.cloud/
go-doudou微服務框架
原文鏈接:https://juejin.cn/post/7116744830738726942
相關推薦
- 2022-04-25 C#使用NPOI讀取excel轉為DataSet_C#教程
- 2022-05-31 C?語言的弱符號與弱引用你了解嗎_C 語言
- 2022-07-31 python虛擬機解釋器及運行過程_python
- 2023-12-16 @Configuration(proxyBeanMethods = true)
- 2023-02-01 Bat腳本之在文件中查找多個字符串并保存到文件中_DOS/BAT
- 2022-10-24 vscode使用Eslint+Prettier格式化代碼的詳細操作_C 語言
- 2022-08-02 C#5.0中的異步編程關鍵字async和await_C#教程
- 2022-12-04 在python?list中篩選包含字符的字段方式_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支