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各时间字符串使用解析
Apr 02 Golang
go语言map与string的相互转换的实现
Apr 07 Golang
基于go interface{}==nil 的几种坑及原理分析
Apr 24 Golang
Golang 正则匹配效率详解
Apr 25 Golang
goland 恢复已更改文件的操作
Apr 28 Golang
Go使用协程交替打印字符
Apr 29 Golang
go语言中fallthrough的用法说明
May 06 Golang
golang实现一个简单的websocket聊天室功能
Oct 05 Golang
golang中的struct操作
Nov 11 Golang
Golang并发工具Singleflight
May 06 Golang
详解Go语言中Get/Post请求测试
Jun 01 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
re0第二季蕾姆被制作组打入冷宫!艾米莉亚女主扶正,原因唏嘘
2020/04/02 日漫
PHP基础知识回顾
2012/08/16 PHP
php pthreads多线程的安装与使用
2016/01/19 PHP
PHP数据对象PDO操作技巧小结
2016/09/27 PHP
PHP yield关键字功能与用法分析
2019/01/03 PHP
JS之小练习代码
2008/10/12 Javascript
javascript 三种编解码方式
2010/02/01 Javascript
浅谈javascript的数据类型检测
2010/07/10 Javascript
div模拟滚动条效果示例代码
2013/10/16 Javascript
利用jQuary实现文字浮动提示效果示例代码
2013/12/26 Javascript
JavaScript简单修改窗口大小的方法
2015/08/03 Javascript
Javascript原型链的原理详解
2016/01/05 Javascript
JavaScript 函数的执行过程
2016/05/09 Javascript
JS遍历ul下的li点击弹出li的索引的实现方法
2016/09/19 Javascript
jquery实现页面加载效果
2017/02/21 Javascript
JavaScript中的普通函数和箭头函数的区别和用法详解
2017/03/21 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
2017/08/16 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
详解js实时获取并显示当前时间的方法
2019/05/10 Javascript
JavaScript构造函数原理及实现流程解析
2020/11/19 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
Django组件cookie与session的具体使用
2019/06/05 Python
解决Django后台ManyToManyField显示成Object的问题
2019/08/09 Python
python lambda函数及三个常用的高阶函数
2020/02/05 Python
如何实现更换Jupyter Notebook内核Python版本
2020/05/18 Python
python2和python3哪个使用率高
2020/06/23 Python
python 检测图片是否有马赛克
2020/12/01 Python
css3的@media属性实现页面响应式布局示例代码
2014/02/10 HTML / CSS
澳大利亚足球鞋和服装购物网站:Ultra Football
2018/10/11 全球购物
安德玛加拿大官网:Under Armour加拿大
2019/10/02 全球购物
读书活动总结范文
2014/04/26 职场文书
经营理念口号
2014/06/21 职场文书
红色经典观后感
2015/06/18 职场文书
python解决12306登录验证码的实现
2021/04/18 Python
Redis实现分布式锁的五种方法详解
2022/06/14 Redis