邢台提供网站建设公司哪家好wdcp搭建wordpress
邢台提供网站建设公司哪家好,wdcp搭建wordpress,兰州做网站优化,厦门建设局网站商品房文章目录 一.前言二. 枚举基本要素描述三. 枚举设计源码3.1 EnumCommon-通用能力3.2 Enum_news 业务枚举3.3 定制化业务枚举 一.前言 用惯了springboot和Jakarta.才发现springboot和Jakarta的语言是多么精妙! 一些场景我们需要使用枚举: 如建立字典值映射,仅通过代码实现方便快… 文章目录 一.前言二. 枚举基本要素描述三. 枚举设计源码3.1 EnumCommon-通用能力3.2 Enum_news 业务枚举3.3 定制化业务枚举 一.前言 用惯了springboot和Jakarta.才发现springboot和Jakarta的语言是多么精妙! 一些场景我们需要使用枚举: 如建立字典值映射,仅通过代码实现方便快捷; 维护自定义响应码; 维护下拉菜单选项 等. 需要注意的是go建立结构体应尽量避免使用基本数值类型,应当使用基本数值类型指针. 因为基本数值类型默认数值可能会与状态值冲突.前端传值无法判nil. 当然也可借助gin等三方框架的校验规则,亦或设置负值默认值.这里给出的是弱依赖,仅用go就能解决的方式.... 二. 枚举基本要素描述 在java中我们发现枚举对象操作很方便. 具备基本包装类型 可以通过自定义方式快速使用 getKeyByVal 可以通过自定义方式快速使用 getValByKey 可以通过自定义方式快速使用 getEnumsList 获取枚举列表.
上述也是我们常用的方式. 那么我们将上述功能还原. 并且 由于go中 1.基本类型和状态值冲突问题 2. 性能考虑 使用指针类型
当然java有些功能太臃肿.比如对象.属性即可; 私有化属性. 通过对象.获取属性的方法()是个伪命题! 这边会优化掉. 三. 枚举设计源码
3.1 EnumCommon-通用能力
在此之前,需要对小白提醒下. go没有文件(类)的概念. go是基于文件夹(包) 来规划代码的.
enum_common.go
package enumsimport fmt// 用来处理枚举
type EnumCommon struct {Key *int json:keyValue string json:value
}
// 用来返回枚举结果
type ReturnEnumCommon struct {Key int json:keyValue string json:value
}var (// 通用枚举UNDISPOSED newEnumCommon(IntPtr(0), 未处理)PROCESSED newEnumCommon(IntPtr(1), 已处理)
)// 包装枚举
func newEnumCommon(key *int, value string) *EnumCommon {return EnumCommon{Key: key,Value: value,}
}// IntPtr 是一个辅助函数用于创建 int 类型的指针 就是用来赋值的
func IntPtr(i int) *int {return i
}// GetEnumCommon 获取当前枚举 即
func (e *EnumCommon) GetEnumCommon() *EnumCommon {return EnumCommon{Key: e.Key,Value: e.Value,}
}// 获取枚举列表
func GetEnumsList(arr []*EnumCommon) []ReturnEnumCommon {var temp []ReturnEnumCommonfor i : 0; i len(arr); i {temp append(temp, ReturnEnumCommon{Key: *arr[i].Key,Value: arr[i].Value,})}return temp
}// GetValByKey 根据key获取val
func GetValByKey(key int, arr []*EnumCommon) string {for i : 0; i len(arr); i {if key *arr[i].Key {return arr[i].Value}}panic(fmt.Sprintf(未找到对应的枚举值.))
}// GetKeyByVal 根据val获取key
func GetKeyByVal(value string, arr []*EnumCommon) int {for i : 0; i len(arr); i {if value arr[i].Value {return *arr[i].Key}}panic(fmt.Sprintf(未找对应的枚举key.))
}
3.2 Enum_news 业务枚举
方法调用了common中的
var (// 发布状态STATUS_STOP createEnum(IntPtr(0), 草稿)STATUS_WAIT createEnum(IntPtr(1), 审核)STATUS_ALLOW createEnum(IntPtr(2), 发布)// 消息类型NEWS_JOURNALISM createEnum(IntPtr(0), 新闻)NEWS_NOTICE createEnum(IntPtr(1), 公告)NEWS_CASE createEnum(IntPtr(2), 案例)// 消息格式STYLE_TEXT createEnum(IntPtr(0), text)STYLE_HTML createEnum(IntPtr(1), html)STYLE_MARKDOWN createEnum(IntPtr(2), markdown)
)// 发布状态枚举遍历能力
var statusArray []*EnumCommon{STATUS_STOP, STATUS_WAIT, STATUS_ALLOW}
var typeArray []*EnumCommon{NEWS_JOURNALISM, NEWS_NOTICE, NEWS_CASE}
var styleArray []*EnumCommon{STYLE_TEXT, STYLE_HTML, STYLE_MARKDOWN}// GetEnumNewsStatus 获取枚举对象
func GetEnumNewsStatus() []ReturnEnumCommon {return GetEnumsList(statusArray)
}
func GetEnumNewsType() []ReturnEnumCommon {return GetEnumsList(typeArray)
}
func GetEnumNewsStyle() []ReturnEnumCommon {return GetEnumsList(styleArray)
}// GetValByNewsStatusKey 获取枚举value by key
func GetValByNewsStatusKey(k int) string {return GetValByKey(k, statusArray)
}
func GetValByNewsTypeKey(k int) string {return GetValByKey(k, typeArray)
}
func GetValByNewsStyleKey(k int) string {return GetValByKey(k, styleArray)
}// GetKeyByNewsStatusVal 获取枚举key by value
func GetKeyByNewsStatusVal(val string) int {return GetKeyByVal(val, statusArray)
}
func GetKeyByNewsTypeVal(val string) int {return GetKeyByVal(val, typeArray)
}
func GetKeyByNewsStyleVal(val string) int {return GetKeyByVal(val, styleArray)
}
部分测试结果
3.3 定制化业务枚举
比如自定义错误码枚举,通用能力用不了多少. demo如下
package enumstype MyError struct {Code int json:codeMsg string json:msgData interface{} json:data
}var (LOGIN_UNKNOWN newError(202, 用户不存在)LOGIN_ERROR newError(203, 账号或密码错误)VALID_ERROR newError(300, 参数错误)OPTIONS_ERROR newError(400, 操作失败)UNAUTHORIZED newError(401, 您还未登录)NOT_FOUND newError(404, 资源不存在)SYSTEM_ERROR newError(500, 系统发生异常)
)func newError(code int, msg string) *MyError {return MyError{Msg: msg,Code: code,}
}func (e *MyError) Error() string {return e.Msg
}func (e *MyError) GetError(data interface{}) *MyError {return MyError{Msg: e.Msg,Code: e.Code,Data: data,}
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/86028.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!