GoFrame框架數(shù)據(jù)校驗(yàn)之校驗(yàn)對(duì)象校驗(yàn)結(jié)構(gòu)體
前言摘要
這篇文章將會(huì)為大家介紹GoFrame數(shù)據(jù)校驗(yàn)中校驗(yàn)對(duì)象的知識(shí)點(diǎn),包括:Validator對(duì)象常用方法的介紹、單數(shù)據(jù)校驗(yàn)、校驗(yàn)Map、校驗(yàn)結(jié)構(gòu)體的示例。
基本概念
數(shù)據(jù)校驗(yàn)組件提供了數(shù)據(jù)校驗(yàn)對(duì)象:用于數(shù)據(jù)校驗(yàn)統(tǒng)一的配置管理,支持我們便捷的進(jìn)行鏈?zhǔn)讲僮鳌?/p>
方法介紹
type Validator
func New() *Validator
func (v *Validator) CheckMap(params interface{}) Error
func (v *Validator) CheckStruct(object interface{}) Error
func (v *Validator) CheckValue(value interface{}) Error
func (v *Validator) Clone() *Validator
func (v *Validator) Ctx(ctx context.Context) *Validator
func (v *Validator) Data(data interface{}) *Validator
func (v *Validator) I18n(i18nManager *gi18n.Manager) *Validator
func (v *Validator) Messages(messages interface{}) *Validator
func (v *Validator) Rules(rules interface{}) *Validator
簡(jiǎn)要說(shuō)明
- New()方法用于創(chuàng)建一個(gè)新的校驗(yàn)對(duì)象。
- CheckValue/CheckMap/CheckStruct方法用于特定參數(shù)類(lèi)型的數(shù)據(jù)校驗(yàn),我們?cè)陧?xiàng)目開(kāi)發(fā)中使用比較多的是CheckStruct,也建議大家使用CheckStruct。
- Ctx()方法用于傳遞Context上下文變量。
- I18n()方法用于設(shè)置當(dāng)前校驗(yàn)對(duì)象的I18N國(guó)際化組件,默認(rèn)情況下,校驗(yàn)組件使用的是框架全局默認(rèn)的i18n組件對(duì)象。
- Data()方法用于設(shè)置需要校驗(yàn)的數(shù)據(jù)集合,支持map類(lèi)型或者struct類(lèi)型。
- Rules()方法用于傳遞當(dāng)前鏈?zhǔn)讲僮餍r?yàn)的自定義校驗(yàn)規(guī)則,支持使用[]string類(lèi)型或者map類(lèi)型。
- Messages()方法用于傳遞當(dāng)前鏈?zhǔn)讲僮餍r?yàn)的自定義錯(cuò)誤提示信息,往往使用map類(lèi)型傳遞,具體看后續(xù)代碼示例。
注意問(wèn)題TIPS
在數(shù)據(jù)校驗(yàn)對(duì)象的CheckValue/CheckMap/CheckStruct方法中,不存在Context上下文變量參數(shù),而是通過(guò)鏈?zhǔn)讲僮鞯腃tx方法來(lái)控制。
GoFrame的g模塊中定義了Validator方法來(lái)快捷創(chuàng)建校驗(yàn)對(duì)象:官方也推薦我們使用g模塊的g.Validator()方式來(lái)快捷創(chuàng)建一個(gè)校驗(yàn)對(duì)象。
鏈?zhǔn)讲僮?/h2>
示例1:?jiǎn)螖?shù)據(jù)校驗(yàn)
簡(jiǎn)單示例
err := g.Validator().Rules("min:60").Messages("考試不及格").CheckValue(16)
fmt.Println(err.String()) //打印結(jié)果:考試不及格
進(jìn)階示例
package main
import (
"fmt"
"github.com/gogf/gf/frame/g"
)
func main() {
data := g.Map{
"password": "123", //這個(gè)的作用僅是定義了這個(gè)結(jié)構(gòu)設(shè)置了默認(rèn)值,并不代表著傳入了值
}
//Data()中的參數(shù)是需要進(jìn)行校驗(yàn)的數(shù)據(jù)集合,常用于map或者結(jié)構(gòu)體類(lèi)型。
//CheckValue()是輸入的參數(shù)
err := g.Validator().Data(data).Rules("required-with:password").Messages("請(qǐng)輸入確認(rèn)密碼").CheckValue("")
if err != nil {
fmt.Println("CheckValue傳入為空時(shí):" + err.String()) // 請(qǐng)輸入確認(rèn)密碼
} else {
fmt.Println("CheckValue傳入為空時(shí):校驗(yàn)通過(guò)")
}
err = g.Validator().Data(data).Rules("required-with:password").Messages("請(qǐng)輸入確認(rèn)密碼").CheckValue("1")
if err != nil {
fmt.Println("CheckValue傳入不為空時(shí):" + err.String()) // 請(qǐng)輸入確認(rèn)密碼
} else {
fmt.Println("CheckValue傳入不為空時(shí):校驗(yàn)通過(guò)")
}
}
進(jìn)階示例打印結(jié)果

示例2:Map數(shù)據(jù)校驗(yàn)
params := map[string]interface{}{
"passport": "",
"password": "wangzhongyang",
"password2": "zhongyang",
}
rules := map[string]string{
"passport": "required|length:6,16",
"password": "required|length:6,16|same:password2",
"password2": "required|length:6,16",
}
messages := map[string]interface{}{
"passport": "賬號(hào)不能為空|賬號(hào)長(zhǎng)度應(yīng)當(dāng)在:min到:max之間",
"password": map[string]string{
"required": "密碼不能為空",
"same": "兩次密碼輸入不相等",
},
}
err := g.Validator().Messages(messages).Rules(rules).CheckMap(params)
if err != nil {
g.Dump(err.Maps())
}
執(zhí)行后,終端輸出:
{
"passport": {
"length": "賬號(hào)長(zhǎng)度應(yīng)當(dāng)在6到16之間",
"required": "賬號(hào)不能為空"
},
"password": {
"same": "兩次密碼輸入不相等"
}
}
示例3:Struct數(shù)據(jù)校驗(yàn)
type User struct {
Name string `v:"required#請(qǐng)輸入用戶姓名"`
Type int `v:"required#請(qǐng)選擇用戶類(lèi)型"`
}
data := g.Map{
"name": "wangzhongyang",
}
user := User{}
if err := gconv.Scan(data, &user); err != nil {
panic(err)
}
err := g.Validator().Data(data).CheckStruct(user)
if err != nil {
fmt.Println(err.Items()) //[map[Type:map[required:請(qǐng)選擇用戶類(lèi)型]]]
}
總結(jié)
這篇文章為大家介紹了GoFrame數(shù)據(jù)校驗(yàn)之校驗(yàn)對(duì)象的知識(shí)點(diǎn),包括:Validator對(duì)象常用方法的介紹、單數(shù)據(jù)校驗(yàn)、校驗(yàn)Map、校驗(yàn)結(jié)構(gòu)體的示例。
更多關(guān)于GoFrame校驗(yàn)結(jié)構(gòu)體的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- GoFrame框架使用避坑指南和實(shí)踐干貨
- GoFrame?gmap遍歷hashmap?listmap?treemap使用技巧
- GoFrame?gredis配置文件及配置方法對(duì)比
- 適合PHP同學(xué)的GoFrame框架使用體驗(yàn)及學(xué)習(xí)建議
- GoFrame?ORM原生方法操作示例
- GoFrame 框架緩存查詢(xún)結(jié)果的示例詳解
- GoFrame錯(cuò)誤處理常用方法及錯(cuò)誤碼使用示例
- GoFrame框架Scan類(lèi)型轉(zhuǎn)換實(shí)例
- GoFrame通用類(lèi)型變量gvar與interface基本使用對(duì)比
- GoLang編程必備:GoFrame?GoLand插件介紹
相關(guān)文章
golang gorm 計(jì)算字段和獲取sum()值的實(shí)現(xiàn)
這篇文章主要介紹了golang gorm 計(jì)算字段和獲取sum()值的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
golang協(xié)程與線程區(qū)別簡(jiǎn)要介紹
這篇文章主要介紹了golang協(xié)程與線程區(qū)別簡(jiǎn)要介紹,進(jìn)程是操作系統(tǒng)資源分配的基本單位,是程序運(yùn)行的實(shí)例,線程是操作系統(tǒng)調(diào)度到CPU中執(zhí)行的基本單位2022-06-06
Go語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的并發(fā)聊天室的項(xiàng)目實(shí)戰(zhàn)
本文主要介紹了Go語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的并發(fā)聊天室的項(xiàng)目實(shí)戰(zhàn),文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
Golang的循環(huán)中break和continue語(yǔ)句的用法講解
這篇文章主要介紹了Golang的循環(huán)中break和continue語(yǔ)句的用法講解,是Go語(yǔ)言入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-10-10
詳解如何在golang鏡像中設(shè)置指定時(shí)區(qū)
這篇文章主要為大家詳細(xì)介紹了如何在golang鏡像中設(shè)置指定時(shí)區(qū),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的可以了解一下2023-04-04
Golang?統(tǒng)計(jì)字符串中數(shù)字字母數(shù)量的實(shí)現(xiàn)方法
這篇文章主要介紹了Golang?統(tǒng)計(jì)字符串中數(shù)字字母數(shù)量,本文給出了兩種從字符串獲取數(shù)字與字母數(shù)量的方法,分別是ASCII 碼值和正則表達(dá)式,需要的朋友可以參考下2022-06-06
Go語(yǔ)言并發(fā)編程之互斥鎖Mutex和讀寫(xiě)鎖RWMutex
Go 語(yǔ)言中提供了很多同步工具,本文將介紹互斥鎖Mutex和讀寫(xiě)鎖RWMutex的使用方法,想要具體了解的小伙伴,請(qǐng)參考下面文章詳細(xì)內(nèi)容,希望對(duì)你有所幫助2021-10-10
基于go中fyne gui的通達(dá)信數(shù)據(jù)導(dǎo)出工具詳解
這篇文章主要介紹了基于go中fyne gui的通達(dá)信數(shù)據(jù)導(dǎo)出工具,這是一個(gè)用 Go 語(yǔ)言開(kāi)發(fā)的通達(dá)信數(shù)據(jù)導(dǎo)出工具,可以將通達(dá)信的本地?cái)?shù)據(jù)導(dǎo)出為多種格式,方便用戶進(jìn)行數(shù)據(jù)分析和處理,需要的朋友可以參考下2024-12-12

