GoFrame如何实现顺序性校验

简介: 这篇文章填上之前留的坑,我们以map校验举例:

基本介绍


我们通过上一篇文章了解到:Error接口对象的方法,其顺序性只有使用顺序校验规则时有效,否则返回的结果是随机的。

即使我们使用FirstItem, FirstString()等其他方法获取校验结果也是一样,返回的校验结果不固定。


无序的原因


因为校验的规则我们传递的是map类型,而golangmap类型并不具有有序性(底层数据结构是hashmap),因此校验的结果和规则一样是随机的,同一个校验结果的同一个校验方法多次获取结果值返回的可能也不一样了。


顺序校验


我们来举个栗子:

校验结果中如果不满足required那么返回对应的错误信息,否则才是后续的校验错误信息;

也就是说,返回的错误信息应当和我设定规则时的顺序一致。


代码示例如下:


package main
import (
  "fmt"
  "github.com/gogf/gf/v2/frame/g"
  "github.com/gogf/gf/v2/os/gctx"
)
func main() {
  var (
    ctx    = gctx.New()
    params = map[string]interface{}{
      "passport":  "",
      "password":  "wangzhongyang",
      "password2": "wangyang",
    }
    rules = []string{
      "passport@required|length:6,16#账号不能为空|账号长度应当在{min}到{max}之间",
      "password@required|length:6,16|same:password2#密码不能为空|密码长度应当在{min}到{max}之间|两次密码输入不相等",
      "password2@required|length:6,16#",
    }
  )  
  err := g.Validator().Rules(rules).Data(params).Run(ctx)  
  if err != nil {
    fmt.Println(err.Map())
    fmt.Println(err.FirstItem())
    fmt.Println(err.FirstError())
  }
}


执行后,终端输出:


map[length:账号长度应当在6到16之间 required:账号不能为空]
passport map[length:账号长度应当在6到16之间 required:账号不能为空]
账号不能为空


可以看到,上述的执行结果是满足顺序性的。

我们来总结一下:我们想要校验结果满足顺序性,只需要将rules参数的类型设置为[]string,按照一定的规则设定即可,并且msgs参数既可以定义到rules参数中,也可以分开传入(使用第三个参数)。

rules的这种满足顺序性校验结果返回的规则,我们称之为gvalid tag

下一篇文章为大家剖析gvalid tag的知识点。


总结


通过这篇文章,我们已经拿到了实现顺序性校验的金钥匙:只需要将rules参数的类型设置为[]string,按照一定的规则设定即可,并且msgs参数既可以定义到rules参数中,也可以分开传入。

相关文章
|
存储 缓存 算法
ES写入过程和写入原理调优及如何保证数据的写一致性(上)
ES写入过程和写入原理调优及如何保证数据的写一致性
ES写入过程和写入原理调优及如何保证数据的写一致性(上)
|
SQL 缓存 NoSQL
接口的幂等性设计和防重保证,详细分析幂等性的几种实现方法
本篇文章详细说明了幂等性,解释了什么是幂等性,幂等性的使用场景,讨论了幂等和防重的概念。分析了幂等性的情况以及如何设计幂等性服务。阐述了幂等性实现防重的几种策略,包括乐关锁,防重表,分布式锁,token令牌以及支付缓冲区。
6229 0
接口的幂等性设计和防重保证,详细分析幂等性的几种实现方法
|
2月前
|
存储 缓存 NoSQL
架构设计篇问题之在数据割接过程中,多线程处理会导致数据错乱和重复问题如何解决
架构设计篇问题之在数据割接过程中,多线程处理会导致数据错乱和重复问题如何解决
|
4月前
|
算法 安全 数据库
幂等(使用场景,详细介绍)
幂等(使用场景,详细介绍)
|
SQL NoSQL Java
【项目场景】如何保证接口的幂等性?
【项目场景】如何保证接口的幂等性?
419 0
|
SQL 负载均衡 NoSQL
【防止重复下单】分布式系统接口幂等性实现方案
【防止重复下单】分布式系统接口幂等性实现方案
1661 0
【防止重复下单】分布式系统接口幂等性实现方案
|
消息中间件 存储 前端开发
该如何理解接口的幂等性?这里总结的很到位
随着互联网的发展,Web API 已成为现代应用程序的重要组成部分,它允许不同的应用程序之间进行通信和数据交换。 那么今天就来讲下关于 Web API 中接口幂等性的一些技术内容,希望对大家有所帮助。
幂等性是什么意思?底层原理是什么?
幂等性是什么意思?底层原理是什么?
147 0
|
设计模式 缓存 安全
【Hystrix技术指南】(6)请求合并机制原理分析
【Hystrix技术指南】(6)请求合并机制原理分析
182 0
【Hystrix技术指南】(6)请求合并机制原理分析
|
存储 缓存 监控
ES写入过程和写入原理调优及如何保证数据的写一致性(下)
ES写入过程和写入原理调优及如何保证数据的写一致性(下)