GoFrame实现顺序性校验示例详解

作者:王中阳Go 时间:2024-02-05 06:24:37 

引言

在上一篇文章中 GoFrame数据校验之校验结果 | Error接口对象 ,关于顺序与非顺序性校验没有做充分的介绍。

这篇文章填上之前留的坑,我们以map校验举例:

基本介绍

我们通过上一篇文章了解到:Error接口对象的方法,其顺序性只有使用顺序校验规则时有效,否则返回的结果是随机的。

即使我们使用FirstItemFirstString()等其他方法获取校验结果也是一样,返回的校验结果不固定。

无序的原因

因为校验的规则我们传递的是map类型,而golangmap类型并不具有有序性(底层数据结构是hashmap),因此校验的结果和规则一样是随机的,同一个校验结果的同一个校验方法多次获取结果值返回的可能也不一样了。

顺序校验

我们来举个栗子:

校验结果中如果不满足required那么返回对应的错误信息,否则才是后续的校验错误信息;

也就是说,返回的错误信息应当和我设定规则时的顺序一致。

代码示例如下:

package main

import (
"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的知识点。

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

标签:GoFrame,顺序性,校验
0
投稿

猜你喜欢

  • Django rest framework如何自定义用户表

    2022-03-12 01:15:02
  • Python标准库之Sys模块使用详解

    2022-03-30 04:45:59
  • 浅谈Python编程中3个常用的数据结构和算法

    2022-02-11 20:15:04
  • python实现一组典型数据格式转换

    2023-07-14 22:19:04
  • Python IDE PyCharm的基本快捷键和配置简介

    2021-09-18 07:08:10
  • python 30行代码实现蚂蚁森林自动偷能量

    2021-07-20 03:04:28
  • js实现圆形菜单选择器

    2023-09-23 19:50:54
  • Pytorch中.new()的作用详解

    2023-12-11 10:28:54
  • 标准的、语义的、Unobtrusive的页签tab切换

    2007-11-03 13:58:00
  • Oracle 8x监控sysdba角色用户登陆情况

    2024-01-19 08:56:43
  • Django url.py path name同一app下路由别名定义

    2023-01-24 23:46:36
  • 浅谈开启magic_quote_gpc后的sql注入攻击与防范

    2024-01-13 01:12:11
  • SQL Server 2000 清理日志精品图文教程

    2024-01-18 17:16:55
  • 变态输入框——再谈校验包容性(一)

    2009-10-10 13:23:00
  • 浅析go中的map数据结构字典

    2024-05-22 10:13:05
  • Pinia简单使用以及数据持久化详解

    2024-05-28 15:52:59
  • php json_encode与json_decode详解及实例

    2023-07-04 22:46:27
  • 详解如何在vue项目中使用layui框架及采坑

    2024-04-09 10:58:35
  • MySQL中几种常见的嵌套查询详解

    2024-01-19 07:48:40
  • PyQtGraph在pyqt中的应用及安装过程

    2022-02-27 17:00:14
  • asp之家 网络编程 m.aspxhome.com