go doudou应用中使用枚举类型教程示例
作者:武斌 发布时间:2024-03-17 19:50:00
标签:go,doudou,枚举类型,教程
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
0
投稿
猜你喜欢
- 写在前面因为暂时还没有想好做什么具体的某个项目来提升对python的理解,所以就自己想着做一下小玩意来加强一下自己对一些库和方法的理解分析1
- 工欲善其事必先利其器,一个好的工具能让起到事半功倍的效果,Python社区提供了足够多的优秀工具来帮助开发者更方便的实现某些想法,下面这几个
- 一、QtDesigner介绍Qt Designer 是一款GUI界面工具,可以实现将UI设计界面转为Python代码的工具;二、安装 QTd
- 你可以按照以下方法使用 ls 命令来查看你的系统中都有那些 Python 的二进制文件可供使用。$ ls /usr/bin/python*/
- MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQLAB公司,在2008年1月16号被Sun公司收购。MySQL被广泛地应用在I
- 我们可以用鼠标把Dreamweaver的层在页面内拖动,但要全屏拖动就困难了,下面是一种实现的方法:制作步骤:一、准备图片,取名/file/
- 一、前期工作环境:python3.6,1080ti,pytorch1.10(实验室服务器的环境)1.设置GPU或者cpuimport tor
- 前言当数据库中存量数据较多时,或者是在批量插入操作时,很容易出现插入重复数据的问题。一、三种方法在 mysql 中,当存在主键冲突或唯一键冲
- 前几天一直在寻找能够输出python函数运行时最大内存消耗的方式,看了一堆的博客和知乎,也尝试了很多方法,最后选择使用memory_prof
- SHA (Secure Hash Algorithm,译作安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研
- 1.打开赶集网登录界面,先模拟登录并抓包,获得post请求的request参数2. 我们只需构造出上面的参数传入formdata即可参数分析
- 一、re模块的基本使用Python里数量词默认是贪婪的,总是尝试匹配尽可能多的字符。正则表达式是用来匹配处理字符串的。假如你需要匹配文本中的
- 前言一个简单的php➕mysql项目学生信息管理系统,用于广大学子完成期末作业的参考,该系统实现增、删、改、查等基本功能。1、登录界面<
- 背景:我司Redis服务器使用的亚马逊服务,本地需要通过跳板机,然后才有权限访问Redis服务。连接原理:使用SSHTunnelForwar
- PDOStatement::bindParamPDOStatement::bindParam — 绑定一个参数到指定的变量名(PHP 5 &
- 前言Python爬虫实战,requests模块,Python实现 * 页爬虫让我们愉快地开始吧~开发工具Python版本: 3.6.4相关模
- 前言for...in 是Python程序员使用最多的语句,for 循环用于迭代容器对象中的元素,这些对象可以是列表、元组、字典、集合、文件,
- 问题: 在Python爬虫的过程中经常要模拟UserAgent, 因此自动生成UserAgent十分有用, 最近看到一个Python库(fa
- pandas官方文档:https://pandas.pydata.org/pandas-docs/stable/?v=20190307135
- MySQL 字符编码集中有两套 UTF-8 编码实现:utf8 和 utf8mb4。如果使用 utf8 的话,存储 emoji 符号和一些比