網(wǎng)站首頁 編程語言 正文
引言
在上一篇文章中 GoFrame數(shù)據(jù)校驗之校驗結(jié)果 | Error接口對象 ,關(guān)于順序與非順序性校驗沒有做充分的介紹。
這篇文章填上之前留的坑,我們以map校驗舉例:
基本介紹
我們通過上一篇文章了解到:Error接口對象的方法,其順序性只有使用順序校驗規(guī)則時有效,否則返回的結(jié)果是隨機的。
即使我們使用FirstItem
,?FirstString()
等其他方法獲取校驗結(jié)果也是一樣,返回的校驗結(jié)果不固定。
無序的原因
因為校驗的規(guī)則我們傳遞的是map
類型,而golang
的map
類型并不具有有序性(底層數(shù)據(jù)結(jié)構(gòu)是hashmap),因此校驗的結(jié)果和規(guī)則一樣是隨機的,同一個校驗結(jié)果的同一個校驗方法多次獲取結(jié)果值返回的可能也不一樣了。
順序校驗
我們來舉個栗子:
校驗結(jié)果中如果不滿足required
那么返回對應(yīng)的錯誤信息,否則才是后續(xù)的校驗錯誤信息;
也就是說,返回的錯誤信息應(yīng)當(dāng)和我設(shè)定規(guī)則時的順序一致。
代碼示例如下:
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#賬號不能為空|賬號長度應(yīng)當(dāng)在{min}到{max}之間", "password@required|length:6,16|same:password2#密碼不能為空|密碼長度應(yīng)當(dāng)在{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()) } }
執(zhí)行后,終端輸出:
map[length:賬號長度應(yīng)當(dāng)在6到16之間 required:賬號不能為空]
passport map[length:賬號長度應(yīng)當(dāng)在6到16之間 required:賬號不能為空]
賬號不能為空
可以看到,上述的執(zhí)行結(jié)果是滿足順序性的。
我們來總結(jié)一下:我們想要校驗結(jié)果滿足順序性,只需要將rules
參數(shù)的類型設(shè)置為[]string
,按照一定的規(guī)則設(shè)定即可,并且msgs
參數(shù)既可以定義到rules
參數(shù)中,也可以分開傳入(使用第三個參數(shù))。
rules
的這種滿足順序性校驗結(jié)果返回的規(guī)則,我們稱之為gvalid tag
。
下一篇文章為大家剖析gvalid tag
的知識點。
總結(jié)
通過這篇文章,我們已經(jīng)拿到了實現(xiàn)順序性校驗的金鑰匙:只需要將rules
參數(shù)的類型設(shè)置為[]string
,按照一定的規(guī)則設(shè)定即可,并且msgs
參數(shù)既可以定義到rules
參數(shù)中,也可以分開傳入。
原文鏈接:https://juejin.cn/post/7113360526410776583
相關(guān)推薦
- 2022-09-09 python處理xml文件操作詳解_python
- 2023-06-04 React中的合成事件是什么原理_React
- 2023-10-15 #css# 超出高度,可上下滾動
- 2022-07-06 C++使用easyx實現(xiàn)打磚塊游戲_C 語言
- 2022-09-24 C#中的引用類型以及特殊引用類型詳解_C#教程
- 2022-10-03 react實現(xiàn)數(shù)據(jù)監(jiān)聽方式_React
- 2022-09-22 String和StringBuilder的用法
- 2022-11-30 深入理解Golang?channel的應(yīng)用_Golang
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支