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 实现超大文件读取的两种方法
Apr 27 Golang
golang 如何通过反射创建新对象
Apr 28 Golang
golang DNS服务器的简单实现操作
Apr 30 Golang
golang中的并发和并行
May 08 Golang
Golang标准库syscall详解(什么是系统调用)
May 25 Golang
Golang 语言控制并发 Goroutine的方法
Jun 30 Golang
golang内置函数len的小技巧
Jul 25 Golang
Go 通过结构struct实现接口interface的问题
Oct 05 Golang
Golang 并发下的问题定位及解决方案
Mar 16 Golang
浅谈GO中的Channel以及死锁的造成
Mar 18 Golang
详解Go语言中配置文件使用与日志配置
Jun 01 Golang
基于Python实现西西成语接龙小助手
Aug 05 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使用ICQ网关发送手机短信
2013/10/30 PHP
微信公众平台天气预报功能开发
2014/07/06 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
js利用div背景,做一个竖线的效果。
2008/11/22 Javascript
防止动态加载JavaScript引起的内存泄漏问题
2009/10/08 Javascript
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
2011/03/17 Javascript
javascript 日期时间 转换的方法
2013/02/21 Javascript
JavaScript获取图片真实大小代码实例
2014/09/24 Javascript
js判断某个字符出现的次数的简单实例
2016/06/03 Javascript
JS实现留言板功能
2017/06/17 Javascript
js中变量的连续赋值(实例讲解)
2017/07/08 Javascript
JavaScript 中Date对象的格式化代码方法汇总
2017/09/06 Javascript
vue项目中api接口管理总结
2018/04/20 Javascript
JS实现电商商品展示放大镜特效
2020/01/07 Javascript
vue 避免变量赋值后双向绑定的操作
2020/11/07 Javascript
[55:44]完美世界DOTA2联赛决赛 FTD vs Phoenix 第二场 11.08
2020/11/11 DOTA
在Python的gevent框架下执行异步的Solr查询的教程
2015/04/16 Python
通过Python来使用七牛云存储的方法详解
2015/08/07 Python
python读取并定位excel数据坐标系详解
2019/06/26 Python
详解Python并发编程之从性能角度来初探并发编程
2019/08/23 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
2019/10/24 Python
flask 框架操作MySQL数据库简单示例
2020/02/02 Python
python isinstance函数用法详解
2020/02/13 Python
django实现更改数据库某个字段以及字段段内数据
2020/03/31 Python
python名片管理系统开发
2020/06/18 Python
PyCharm常用配置和常用插件(小结)
2021/02/06 Python
英国网上花店:Bunches
2016/11/29 全球购物
法律专业实习鉴定
2013/12/22 职场文书
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
英语简历自我评价
2014/01/26 职场文书
运动会通讯稿100字
2014/01/31 职场文书
2014年党员学习“三严三实”思想汇报
2014/09/15 职场文书
2014年卫生院工作总结
2014/12/03 职场文书
行政主管岗位职责范本
2015/04/09 职场文书
Python 如何解决稀疏矩阵运算
2021/05/26 Python
MySQL 常见的数据表设计误区汇总
2021/06/07 MySQL