GoFrame实现顺序性校验示例详解
作者:王中阳Go 发布时间:2024-02-05 06:24:37
引言
在上一篇文章中 GoFrame数据校验之校验结果 | Error接口对象 ,关于顺序与非顺序性校验没有做充分的介绍。
这篇文章填上之前留的坑,我们以map校验举例:
基本介绍
我们通过上一篇文章了解到:Error接口对象的方法,其顺序性只有使用顺序校验规则时有效,否则返回的结果是随机的。
即使我们使用FirstItem
, FirstString()
等其他方法获取校验结果也是一样,返回的校验结果不固定。
无序的原因
因为校验的规则我们传递的是map
类型,而golang
的map
类型并不具有有序性(底层数据结构是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
猜你喜欢
- 发邮件是一种很常见的操作,本篇主要介绍一下如何用python实现自动发件。import smtplibfrom email.mime.tex
- 一、Pythont如何打开 txt 格式的文件?1.首先我使用pycharm创建一个项目,然后在这个项目里面再创建一个python的包,然后
- 远程连接sql server 2000服务器的解决方案 一 看ping 服务器IP能否ping通。 这个实际上是看和远程sql server
- 场景产品中有一张图片表pics,数据量将近100万条,有一条相关的查询语句,由于执行频次较高,想针对此语句进行优化表结构很简单,主要字段:u
- 当我们建立一个数据库时,并且想将分散在各处的不同类型的数据库分类汇总在这个新建的数据库中时,尤其是在进行数据检验、净化和转换时,将会面临很大
- 前言pytest配置文件可以改变pytest的运行方式,它是一个固定的文件pytest.ini文件,读取配置信息,按指定的方式去运行非tes
- #region 读写xml文件的2个小函数,2005 4 2 by hyc public void 
- 这篇文章主要介绍了python字符串替换re.sub()实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 一、构造函数 __init__ 与__new____new__ 作用: 创建对象,并分配内存__init__ 作用: 初始化对
- 基本环境配置python 3.6pycharmrequestsparseltime相关模块pip安装即可确定目标网页数据哦豁,这个价格...
- 代码如下from bs4 import BeautifulSoup #网页解析,获取数据import sys #正则表达式,进行文字匹配im
- 目录1.列表中存储字典:1.列表中存储多个字典2.访问列表中字典的值3.遍历访问多个值2.字典中存储列表1.访问字典中的列表元素2.访问字典
- 一、报错error connecting to master 'x@x.x.x.x:x' - retry-time: 60&
- Socket是网络编程的一个抽象概念。通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地
- 编程是数据科学中不可或缺的技能,虽然创建脚本来执行基本功能很容易,但编写大规模可读性良好的代码需要更多的思考。关于PEP-8pycodest
- 当管理SQL Server内在的帐户和密码时,我们很容易认为这一切都相当的安全。毕竟,你的SQL Server系统被保护在防火墙里,而且还有
- 下面给大家介绍Java正则表达式验证固定电话号码符合性,具体代码如下所示:/** * 验证固定电话号码的合法性 * @author jy *
- 本文代码需要正确安装Python扩展库pywin32,建议下载whl文件进行离线安装。然后调用win32api的ShellExecute()
- 前言如果一个类是别人编写的,又没有帮助文档,怎么样来查看所有成员函数呢?本文详细给大家介绍了关于python用dir函数查看类中所有成员函数
- 本文实例讲述了Python实现队列的方法。分享给大家供大家参考。具体实现方法如下:#!/usr/bin/env python queue =