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