go doudou应用中使用枚举类型教程示例

作者:武斌 时间:2024-03-17 19:50:00 

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微服务框架

来源:https://juejin.cn/post/7116744830738726942

标签:go,doudou,枚举类型,教程
0
投稿

猜你喜欢

  • IntelliJ IDEA卡死,如何优化内存

    2023-07-04 12:10:27
  • python自动化测试selenium执行js脚本实现示例

    2023-10-23 06:41:58
  • python DataFrame 取差集实例

    2021-06-06 01:22:24
  • matplotlib调整子图间距,调整整体空白的方法

    2021-12-17 15:06:58
  • Django显示可视化图表的实践

    2023-04-13 02:42:38
  • 一文带你掌握Python中多线程和线程池的使用方法

    2022-10-20 21:53:09
  • python读取并绘制nc数据的保姆级教程

    2023-11-23 02:19:24
  • 使用python无账号无限制获取企查查信息的实例代码

    2021-09-23 20:26:10
  • Oracle9i数据库异常关闭后的启动

    2010-07-21 12:46:00
  • Pytorch实现图像识别之数字识别(附详细注释)

    2022-04-08 08:12:54
  • Pygame与OpenCV联合播放视频并保证音画同步

    2021-09-04 22:23:11
  • js友好的表单验证程序vform

    2007-08-16 13:32:00
  • 原生JS实现跑马灯效果

    2024-04-19 09:53:11
  • 在golang中操作mysql数据库的实现代码

    2024-01-15 14:41:51
  • PHP实现的浏览器检查类

    2024-05-13 09:26:24
  • Python中Dict两种实现的原理详解

    2022-11-13 06:20:29
  • python实现员工管理系统

    2022-01-03 05:20:15
  • Matplotlib中%matplotlib inline如何使用

    2021-11-22 15:17:41
  • python实现从ftp上下载文件的实例方法

    2021-04-24 16:37:02
  • 国产化设备鲲鹏CentOS7上源码安装Python3.7的过程详解

    2023-04-23 14:08:42
  • asp之家 网络编程 m.aspxhome.com