目录Go语言支持语法自己实现枚举类型结构体类型示例接口请求参数示例go语言支持语法自己实现枚举类型 我们都知道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应用中使用枚举类型教程示例的详细内容,更多关于go doudou枚举类型的资料请关注编程网其它相关文章!
--结束END--
本文标题: go doudou应用中使用枚举类型教程示例
本文链接: https://lsjlt.com/news/174467.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-04-05
2024-04-05
2024-04-05
2024-04-04
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-04
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0