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 go get私有仓库的问题
May 05 Golang
Golang 编译成DLL文件的操作
May 06 Golang
Go 在 MongoDB 中常用查询与修改的操作
May 07 Golang
Golang 实现获取当前函数名称和文件行号等操作
May 08 Golang
go 实现简易端口扫描的示例
May 22 Golang
试了下Golang实现try catch的方法
Jul 01 Golang
golang内置函数len的小技巧
Jul 25 Golang
Go中的条件语句Switch示例详解
Aug 23 Golang
Golang 并发下的问题定位及解决方案
Mar 16 Golang
golang操作redis的客户端包有多个比如redigo、go-redis
Apr 14 Golang
golang定时器
Apr 14 Golang
Go语言测试库testify使用学习
Jul 23 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 配置open_basedir 让各虚拟站点独立运行
2009/11/12 PHP
php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
2010/08/21 PHP
使用NetBeans + Xdebug调试PHP程序的方法
2011/04/12 PHP
PHP输出缓存ob系列函数详解
2014/03/11 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
PHP利用Mysql锁解决高并发的方法
2018/09/04 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
菜单效果
2006/10/14 Javascript
jqplot通过ajax动态画折线图的方法及思路
2013/12/08 Javascript
node.js中的fs.fchmodSync方法使用说明
2014/12/16 Javascript
javascript bom是什么及bom和dom的区别
2015/11/26 Javascript
AngularJS内建服务$location及其功能详解
2016/07/01 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
2016/07/22 Javascript
Bootstrap的fileinput插件实现多文件上传的方法
2016/09/05 Javascript
浅谈Node.js:理解stream
2016/12/08 Javascript
原生JS实现N级菜单的代码
2017/05/21 Javascript
基于vue的短信验证码倒计时demo
2017/09/13 Javascript
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
2019/02/02 NodeJs
原生JavaScript实现五子棋游戏
2020/11/09 Javascript
[19:15]DK战队纪录片
2014/09/02 DOTA
[03:42]2018完美盛典-《加冕》
2018/12/16 DOTA
Python实现简单HTML表格解析的方法
2015/06/15 Python
创建pycharm的自定义python模板方法
2018/05/23 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
2018/12/14 Python
Python函数返回不定数量的值方法
2019/01/22 Python
Python3.8中使用f-strings调试
2019/05/22 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
2020/05/11 Python
Python如何测试stdout输出
2020/08/10 Python
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
百度吧主申请感言
2014/01/12 职场文书
员工拓展培训方案
2014/02/15 职场文书
个人融资协议书
2014/10/02 职场文书
学校党支部承诺书
2015/04/30 职场文书
百年校庆宣传标语口号
2015/12/26 职场文书
PostgreSQL通过oracle_fdw访问Oracle数据的实现步骤
2021/05/21 PostgreSQL
python 网络编程要点总结
2021/06/18 Python