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 相关文章推荐
go 原生http web 服务跨域restful api的写法介绍
Apr 27 Golang
golang协程池模拟实现群发邮件功能
May 02 Golang
golang gopm get -g -v 无法获取第三方库的解决方案
May 05 Golang
go语言中http超时引发的事故解决
Jun 02 Golang
Golang的继承模拟实例
Jun 30 Golang
K8s部署发布Golang应用程序的实现方法
Jul 16 Golang
Go语言实现Base64、Base58编码与解码
Jul 26 Golang
golang使用map实现去除重复数组
Apr 14 Golang
GO语言异常处理分析 err接口及defer延迟
Apr 14 Golang
Golang 链表的学习和使用
Apr 19 Golang
Golang 对es的操作实例
Apr 20 Golang
Golang实现可重入锁的示例代码
May 25 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写的采集程序
2007/03/16 PHP
PHP生成RSS文件类实例
2014/12/05 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
2009/11/27 Javascript
关于Aptana Studio生成自动备份文件的解决办法
2009/12/23 Javascript
textarea 控制输入字符字节数(示例代码)
2013/12/27 Javascript
Egret引擎开发指南之运行项目
2014/09/03 Javascript
js实现n秒倒计时后才可以点击的效果
2015/12/20 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
2016/07/22 Javascript
dul无法加载bootstrap实现unload table/user恢复
2016/09/29 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
nodejs入门教程五:连接数据库的方法分析
2017/04/24 NodeJs
php简单数据库操作类的封装
2017/06/08 Javascript
详解在 Angular 项目中添加 clean-blog 模板
2017/07/04 Javascript
基于LayUI实现前端分页功能的方法
2017/07/22 Javascript
JS实现利用两个队列表示一个栈的方法
2017/12/13 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
关于Vue源码vm.$watch()内部原理详解
2019/04/26 Javascript
jquery实现垂直无限轮播的方法分析
2019/07/16 jQuery
如何搭建一个完整的Vue3.0+ts的项目步骤
2020/10/18 Javascript
Javascript表单序列化原理及实现代码详解
2020/10/30 Javascript
python中map()与zip()操作方法
2016/02/27 Python
Python 常用的安装Module方式汇总
2017/05/06 Python
详解Python中的四种队列
2018/05/21 Python
解决python opencv无法显示图片的问题
2018/10/28 Python
Python增强赋值和共享引用注意事项小结
2019/05/28 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
python实现发送邮件
2021/03/02 Python
优秀毕业生自我鉴定
2014/01/19 职场文书
经贸日语专业个人求职信范文
2014/04/29 职场文书
保卫钓鱼岛口号
2014/06/20 职场文书
2015年复活节活动总结
2015/02/27 职场文书
Nginx 负载均衡是什么以及该如何配置
2021/03/31 Servers
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
2021/04/16 PHP
MySQL 逻辑备份与恢复测试的相关总结
2021/05/14 MySQL
警用民用对讲机找不同
2022/02/18 无线电