举报投诉联系我们 手机版 热门标签 编程学
您的位置:编程学 > GoFrame Map校验-校验顺序性

GoFrame Map校验-校验顺序性

2023-05-14 09:18 GoFrame教程

 GoFrame Map校验-校验顺序性

基本介绍

如果将之前的示例代码多执行几次之后会发现,返回的结果是没有排序的,而且字段及规则输出的先后顺序完全是随机的。即使我们使用​FirstItem​, ​FirstString()​等其他方法获取校验结果也是一样,返回的校验结果不固定。那是因为校验的规则我们传递的是​map​类型,而golang的​map​类型并不具有有序性,因此校验的结果和规则一样是随机的,同一个校验结果的同一个校验方法多次获取结果值返回的可能也不一样了。

顺序校验

我们来改进一下以上的示例:校验结果中如果不满足​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":  "123456",
			"password2": "1234567",
		}
		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​,与前面​Struct​校验章节介绍的​gvalid tag​一致。


阅读全文
以上是编程学为你收集整理的 GoFrame Map校验-校验顺序性全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 编程学 bianchengxue.com 版权所有 联系我们
桂ICP备19012293号-7 返回底部