如果将之前的示例代码多执行几次之后会发现,返回的结果是没有排序的,而且字段及规则输出的先后顺序完全是随机的。即使我们使用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教程:GoFrameMap校验-校验顺序性
网址分享:http://www.shufengxianlan.com/qtweb/news9/204209.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联