欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

go?doudou應(yīng)用中使用枚舉類型教程示例

 更新時(shí)間:2022年12月07日 10:58:14   作者:武斌  
這篇文章主要為大家介紹了go?doudou應(yīng)用中使用枚舉類型教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

go語(yǔ)言支持語(yǔ)法自己實(shí)現(xiàn)枚舉類型

我們都知道go語(yǔ)言沒(méi)有原生的枚舉類型,但是做業(yè)務(wù)開(kāi)發(fā)有些時(shí)候沒(méi)有枚舉類型確實(shí)不方便前后端聯(lián)調(diào)。我們可以通過(guò)go語(yǔ)言支持的語(yǔ)法自己實(shí)現(xiàn)枚舉類型。請(qǐng)看以下示例代碼和注釋說(shuō)明:

// 首先定義一個(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)文章

最新評(píng)論