go?doudou應(yīng)用中使用枚舉類型教程示例
go語言支持語法自己實現(xiàn)枚舉類型
我們都知道go語言沒有原生的枚舉類型,但是做業(yè)務(wù)開發(fā)有些時候沒有枚舉類型確實不方便前后端聯(lián)調(diào)。我們可以通過go語言支持的語法自己實現(xiàn)枚舉類型。請看以下示例代碼和注釋說明:
// 首先定義一個int類型別名,新類型名稱就是枚舉類型名稱
type KeyboardLayout int
// 然后定義若干常量,作為枚舉值
// 第一個常量是默認值
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)體的屬性類型或是接口請求參數(shù)類型。
結(jié)構(gòu)體類型示例
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…
關(guān)于go-doudou的更多特性和用法請參考官方文檔:go-doudou.unionj.cloud/
go-doudou微服務(wù)框架
以上就是go doudou應(yīng)用中使用枚舉類型教程示例的詳細內(nèi)容,更多關(guān)于go doudou枚舉類型的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Golang 定時器(Timer 和 Ticker),這篇文章就夠了
這篇文章主要介紹了Golang 定時器(Timer 和 Ticker),這篇文章就夠了,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-10-10
基于go手動寫個轉(zhuǎn)發(fā)代理服務(wù)的代碼實現(xiàn)
這篇文章主要介紹了基于go手動寫個轉(zhuǎn)發(fā)代理服務(wù)的代碼實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-02-02
Go?channel結(jié)構(gòu)體源碼和讀寫和關(guān)閉過程詳解
這篇文章主要介紹了Go?channel結(jié)構(gòu)體源碼和讀寫和關(guān)閉過程,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05
Golang實現(xiàn)事務(wù)型內(nèi)存數(shù)據(jù)庫的方法詳解
內(nèi)存數(shù)據(jù)庫經(jīng)我們經(jīng)常用到,例如Redis,那么如何從零實現(xiàn)一個內(nèi)存數(shù)據(jù)庫呢,本文旨在介紹如何使用Golang編寫一個KV內(nèi)存數(shù)據(jù)庫MossDB2023-03-03
Go關(guān)鍵字defer的使用和底層實現(xiàn)
defer是Go語言的關(guān)鍵字,一般用于資源的釋放和異常的捕捉,defer語句后將其后面跟隨的語句進行延遲處理,就是說在函數(shù)執(zhí)行完畢后再執(zhí)行調(diào)用,也就是return的ret指令之前,本文給大家介紹了Go關(guān)鍵字defer的使用和底層實現(xiàn),需要的朋友可以參考下2023-11-11
Golang的Crypto/SHA256庫實戰(zhàn)指南
無論是在保護數(shù)據(jù)安全、驗證數(shù)據(jù)完整性,還是在構(gòu)建復(fù)雜的安全系統(tǒng)中,crypto/sha256都是Golang程序員不可或缺的工具,本文主要介紹了Golang的Crypto/SHA256庫實戰(zhàn)指南,感興趣的可以了解一下2024-02-02
golang中使用proto3協(xié)議導(dǎo)致的空值字段不顯示的問題處理方案
這篇文章主要介紹了golang中使用proto3協(xié)議導(dǎo)致的空值字段不顯示的問題處理方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10
Golang WebView跨平臺的桌面應(yīng)用庫的使用
Golang WebView是一個強大的桌面應(yīng)用庫,本文介紹了Golang WebView的特點和使用方法,并列舉示例詳細的介紹了其在實際項目中的應(yīng)用,具有一定的參考價值,感興趣的可以了解一下2024-03-03

