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项目中使用init()
Apr 12 Golang
Go语言中的UTF-8实现
Apr 26 Golang
Golang中interface{}转为数组的操作
Apr 30 Golang
Golang 编译成DLL文件的操作
May 06 Golang
Golang Gob编码(gob包的使用详解)
May 07 Golang
Go语言应该什么情况使用指针
Jul 25 Golang
手把手教你导入Go语言第三方库
Aug 04 Golang
Golang 对es的操作实例
Apr 20 Golang
Golang bufio详细讲解
Apr 21 Golang
Golang入门之计时器
May 04 Golang
GO中sync包自由控制并发示例详解
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
Blitz templates 最快的PHP模板引擎
2010/04/06 PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
2014/05/10 PHP
简单介绍PHP的责任链编程模式
2015/08/11 PHP
一个非常实用的php文件上传类
2017/07/04 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
JQuery 学习笔记 element属性控制
2009/07/23 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战一)
2013/08/21 Javascript
JQuery实现点击div以外的位置隐藏该div窗口
2013/09/13 Javascript
ajax请求get与post的区别总结
2013/11/04 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
For循环中分号隔开的3部分的执行顺序探讨
2014/05/27 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
表单验证插件Validation应用的实例讲解
2015/10/10 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
JavaScript实现的商品抢购倒计时功能示例
2017/04/17 Javascript
详解微信JS-SDK选择图片遇到的坑
2018/08/15 Javascript
解决vue点击控制单个样式的问题
2018/09/05 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
2018/11/15 Javascript
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
Vue中的验证登录状态的实现方法
2019/03/09 Javascript
js实现前端界面导航栏下拉列表
2020/08/27 Javascript
[05:09]2016国际邀请赛中国区预选赛淘汰赛首日精彩回顾
2016/06/29 DOTA
python中查看变量内存地址的方法
2015/05/05 Python
Python实现将数据库一键导出为Excel表格的实例
2016/12/30 Python
详解python使用递归、尾递归、循环三种方式实现斐波那契数列
2018/01/16 Python
tensorflow学习笔记之简单的神经网络训练和测试
2018/04/15 Python
Python工厂函数用法实例分析
2018/05/14 Python
Flask之flask-script模块使用
2018/07/26 Python
python实现蒙特卡罗方法教程
2019/01/28 Python
自考自我鉴定范文
2013/10/30 职场文书
庆元旦文艺演出主持词
2014/03/27 职场文书
党员干部观看《周恩来四个昼夜》思想汇报
2014/09/10 职场文书
党员弘扬焦裕禄精神思想汇报
2014/09/10 职场文书
2014年组织委员工作总结
2014/12/01 职场文书
关爱留守儿童捐款倡议书
2015/04/27 职场文书
Vue中Object.assign清空数据报错的解决方案
2022/03/03 Vue.js