GoFrame框架数据校验之校验结果Error接口对象


Posted in Golang onJune 21, 2022

上一篇文章介绍了 GoFrame数据校验之校验对象 | 校验结构体 ,得到了大家积极的反馈。

再接再厉,这篇总结分享:GoFrame数据校验之校验结果总结分享。

基本介绍

校验结果为一个Error接口对象。当数据规则校验成功时,校验方法返回的结果为nil

当数据规则校验失败时,返回的该对象是包含结构化的层级map,包含多个字段及其规则及对应错误信息,以便于接收端能够准确定位错误规则。

方法示例

首先我们看一下Error的数据结构:

type Error interface {
    Current() error
    Error() string
    FirstItem() (key string, messages map[string]string)
    FirstRule() (rule string, err string)
    FirstString() (err string)
    Items() (items []map[string]map[string]string)
    Map() map[string]string
    Maps() map[string]map[string]string
    String() string
    Strings() (errs []string) 
}

注意问题

可以通过Maps()方法获得该原始错误信息数据结构map

在项目开发中,我们可以通过Error接口的其他方法来获取特定的错误信息。

当我们并不关心具体出错的校验规则时,可以使用String方法,直接返回所有的错误信息。

方法详解

获取校验结果的值可以通过多个校验结果方法获取:

Items()在顺序性校验中将会按照校验规则返回校验错误的信息数组。其顺序性只有使用顺序校验规则时有效,否则返回的结果是随机的。

Map() 会返回FirstItem中的出错规则及对应的错误信息map

Maps() 会返回所有的出错键名及对应的出错规则及对应的错误信息(map[string]map[string]string)。

String() 会返回所有的错误信息,构成一条字符串返回,多个规则错误信息之间以;符号连接。其顺序性只有使用顺序校验规则时有效,否则返回的结果是随机的。我们会比较常用。

Strings 会返回所有的错误信息,构成[]string类型返回。其顺序性只有使用顺序校验规则时有效,否则返回的结果是随机的。

FirstItem 在有多个键名/属性校验错误的时候,用以获取出错的第一个键名,以及其对应的出错规则和错误信息。其顺序性只有使用顺序校验规则时有效,否则返回的结果是随机的。

FirstRule 会返回FirstItem中得第一条出错的规则及错误信息。其顺序性只有使用顺序校验规 则时有效,否则返回的结果是随机的。

FirstString 会返回FirstRule中得第一条规则错误信息。其顺序性只有使用顺序校验规则时有效,否则返回的结果是随机的。

进阶

因为gvalid.Error实现了Current() error接口,因此可以通过gerror.Current方法获取它的第一条错误信息,这在接口校验失败时返回错误信息非常方便。

注意问题

数据校验时存在顺序性校验和非顺序性校验,这会对获取第一条错误信息的结果产生影响。

关于顺序与非顺序性校验,可以关注我,后面的文章中会更新说明。

总结

这篇文章为大家介绍了GoFrame gvalid 校验结果相关的知识点:

校验结果为一个Error接口对象。当数据规则校验成功时,校验方法返回的结果为nil

当数据规则校验失败时,返回的该对象是包含结构化的层级map,包含多个字段及其规则及对应错误信息,以便于接收端能够准确定位错误规则。

更多关于GoFrame数据校验Error接口对象的资料请关注三水点靠木其它相关文章!


Tags in this post...

Golang 相关文章推荐
golang 实现对Map进行键值自定义排序
Apr 28 Golang
彻底理解golang中什么是nil
Apr 29 Golang
Golang 空map和未初始化map的注意事项说明
Apr 29 Golang
golang 接口嵌套实现复用的操作
Apr 29 Golang
Golang 语言控制并发 Goroutine的方法
Jun 30 Golang
golang fmt格式“占位符”的实例用法详解
Jul 04 Golang
golang用type-switch判断interface的实际存储类型
Apr 14 Golang
GO语言异常处理分析 err接口及defer延迟
Apr 14 Golang
Golang MatrixOne使用介绍和汇编语法
Apr 19 Golang
深入理解 Golang 的字符串
May 04 Golang
GoFrame基于性能测试得知grpool使用场景
Jun 21 Golang
Go语言怎么使用变长参数函数
Jul 15 Golang
GoFrame基于性能测试得知grpool使用场景
Jun 21 #Golang
Golang gRPC HTTP协议转换示例
Go Grpc Gateway兼容HTTP协议文档自动生成网关
Jun 16 #Golang
Go gRPC进阶教程gRPC转换HTTP
Jun 16 #Golang
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
Jun 14 #Golang
Go调用Rust方法及外部函数接口前置
详解Go语言中配置文件使用与日志配置
Jun 01 #Golang
You might like
十天学会php之第二天
2006/10/09 PHP
php将数据库中的电话号码读取出来并生成图片
2008/08/31 PHP
PHP中如何实现常用邮箱的基本判断
2014/01/07 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
2015/02/03 PHP
常用PHP封装分页工具类
2017/01/14 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
laravel 数据验证规则详解
2019/10/23 PHP
JavaScript中Array 对象相关的几个方法
2006/12/22 Javascript
广告代码静态化js通用函数
2007/05/09 Javascript
js实现收缩菜单效果实例代码
2013/10/30 Javascript
js 通过html()及text()方法获取并设置p标签的显示值
2014/05/14 Javascript
JS获取图片高度宽度的方法分享
2015/04/17 Javascript
JavaScript的代码编写格式规范指南
2015/12/07 Javascript
Bootstrap中data-target 到底是什么
2017/02/14 Javascript
Angular.js自定义指令学习笔记实例
2017/02/24 Javascript
angular中ui calendar的一些使用心得(推荐)
2017/11/03 Javascript
Angular中点击li标签实现更改颜色的核心代码
2017/12/08 Javascript
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
vue配置多页面的实现方法
2018/05/22 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
2019/01/08 Javascript
jQuery事件多次绑定与解绑问题实例分析
2019/02/19 jQuery
python文件读写并使用mysql批量插入示例分享(python操作mysql)
2014/02/17 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
2016/07/02 Python
利用Python在一个文件的头部插入数据的实例
2018/05/02 Python
Python 中导入csv数据的三种方法
2018/11/01 Python
python-django中的APPEND_SLASH实现方法
2019/06/21 Python
运行Python编写的程序方法实例
2020/10/21 Python
Waterford英国官方网站:世界上最受欢迎的优质水晶品牌
2019/08/17 全球购物
波兰化妆品和护肤品购物网站:eKobieca
2019/08/30 全球购物
社区巾帼文明岗事迹材料
2014/06/03 职场文书
办公室文员岗位职责范本
2014/06/12 职场文书
学习十八大宣传标语
2014/10/09 职场文书
项目负责人岗位职责
2015/02/15 职场文书
舞出我人生观后感
2015/06/16 职场文书
PHP解决高并发问题
2021/04/01 PHP
SQL Server数据库备份和恢复数据库的全过程
2022/06/14 SQL Server