go?doudou應用中使用枚舉類型教程示例
go語言支持語法自己實現(xiàn)枚舉類型
我們都知道go語言沒有原生的枚舉類型,但是做業(yè)務開發(fā)有些時候沒有枚舉類型確實不方便前后端聯(lián)調。我們可以通過go語言支持的語法自己實現(xiàn)枚舉類型。請看以下示例代碼和注釋說明:
// 首先定義一個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()) }
定義以后就可以直接用作結構體的屬性類型或是接口請求參數(shù)類型。
結構體類型示例
type Keyboard struct { Layout KeyboardLayout `json:"layout,omitempty"` Backlit bool `json:"backlit,omitempty"` }
接口請求參數(shù)示例
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微服務框架
以上就是go doudou應用中使用枚舉類型教程示例的詳細內容,更多關于go doudou枚舉類型的資料請關注腳本之家其它相關文章!
相關文章
深入了解Go的interface{}底層原理實現(xiàn)
本文主要介紹了Go的interface{}底層原理實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-06-06Go語言MySQLCURD數(shù)據(jù)庫操作示例詳解
這篇文章主要為大家介紹了Go語言MySQLCURD數(shù)據(jù)庫操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12云端golang開發(fā),無需本地配置,能上網(wǎng)就能開發(fā)和運行
這篇文章主要介紹了云端golang開發(fā),無需本地配置,能上網(wǎng)就能開發(fā)和運行的相關資料,需要的朋友可以參考下2023-10-10Go語言中?Print?Printf和Println?的區(qū)別解析
這篇文章主要介紹了Go語言中?Print?Printf和Println?的區(qū)別,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03詳解golang避免循環(huán)import問題(“import cycle not allowed”)
這篇文章主要給大家介紹了關于golang中不允許循環(huán)import問題("import cycle not allowed")的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧2018-08-08