GoFrame实现顺序性校验示例详解
目录
- 引言
- 基本介绍
- 无序的原因
- 顺序校验
- 总结
引言 在上一篇文章中 GoFrame数据校验之校验结果 | Error接口对象 ,关于顺序与非顺序性校验没有做充分的介绍。
这篇文章填上之前留的坑,我们以map校验举例:
基本介绍 我们通过上一篇文章了解到:Error接口对象的方法,其顺序性只有使用顺序校验规则时有效,否则返回的结果是随机的。
即使我们使用
FirstItem
, FirstString()
等其他方法获取校验结果也是一样,返回的校验结果不固定。无序的原因 因为校验的规则我们传递的是
map
类型,而golang
的map
类型并不具有有序性(底层数据结构是hashmap),因此校验的结果和规则一样是随机的,同一个校验结果的同一个校验方法多次获取结果值返回的可能也不一样了。顺序校验 我们来举个栗子:
校验结果中如果不满足
required
那么返回对应的错误信息,否则才是后续的校验错误信息;也就是说,返回的错误信息应当和我设定规则时的顺序一致。
代码示例如下:
package mainimport ( "fmt" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gctx")func main() { var (ctx= gctx.New()params = map[string]interface{}{"passport":"","password":"wangzhongyang","password2": "wangyang",}rules = []string{"passport@required|length:6,16#账号不能为空|账号长度应当在{min}到{max}之间","password@required|length:6,16|same:password2#密码不能为空|密码长度应当在{min}到{max}之间|两次密码输入不相等","password2@required|length:6,16#",} ) err := g.Validator().Rules(rules).Data(params).Run(ctx) if err != nil {fmt.Println(err.Map())fmt.Println(err.FirstItem())fmt.Println(err.FirstError()) }}
执行后,终端输出:
map[length:账号长度应当在6到16之间 required:账号不能为空]可以看到,上述的执行结果是满足顺序性的。
passport map[length:账号长度应当在6到16之间 required:账号不能为空]
账号不能为空
我们来总结一下:我们想要校验结果满足顺序性,只需要将
rules
参数的类型设置为[]string
,按照一定的规则设定即可,并且msgs
参数既可以定义到rules
参数中,也可以分开传入(使用第三个参数)。rules
的这种满足顺序性校验结果返回的规则,我们称之为gvalid tag
。下一篇文章为大家剖析
gvalid tag
的知识点。总结 通过这篇文章,我们已经拿到了实现顺序性校验的金钥匙:只需要将
rules
参数的类型设置为[]string
,按照一定的规则设定即可,并且msgs
参数既可以定义到rules
参数中,也可以分开传入。【GoFrame实现顺序性校验示例详解】以上就是GoFrame实现顺序性校验示例详解的详细内容,更多关于GoFrame顺序性校验的资料请关注脚本之家其它相关文章!
推荐阅读
- 优雅使用GoFrame共享变量Context示例详解
- 动态调整线程池参数
- vue|响应式实现
- 如何在智汀中实现智能锁与灯、智能窗帘电机场景联动()
- 使用|使用 EMQX Cloud 实现物联网设备一机一密验证
- NOA|如何实现“轻高精地图”的城市NOH(毫末自动驾驶的8大亮点)
- 原生js实现手风琴效果
- MindSpore|项目经验分享(基于昇思MindSpore实现手写汉字识别)
- 投稿|苹果的基带梦,根本不可能实现?
- js--js实现基础排序算法