GoFrame框架數據校驗之校驗對象校驗結構體
前言摘要
這篇文章將會為大家介紹GoFrame數據校驗中校驗對象的知識點,包括:Validator對象常用方法的介紹、單數據校驗、校驗Map、校驗結構體的示例。
基本概念
數據校驗組件提供了數據校驗對象:用于數據校驗統(tǒng)一的配置管理,支持我們便捷的進行鏈式操作。
方法介紹
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
簡要說明
- New()方法用于創(chuàng)建一個新的校驗對象。
- CheckValue/CheckMap/CheckStruct方法用于特定參數類型的數據校驗,我們在項目開發(fā)中使用比較多的是CheckStruct,也建議大家使用CheckStruct。
- Ctx()方法用于傳遞Context上下文變量。
- I18n()方法用于設置當前校驗對象的I18N國際化組件,默認情況下,校驗組件使用的是框架全局默認的i18n組件對象。
- Data()方法用于設置需要校驗的數據集合,支持map類型或者struct類型。
- Rules()方法用于傳遞當前鏈式操作校驗的自定義校驗規(guī)則,支持使用[]string類型或者map類型。
- Messages()方法用于傳遞當前鏈式操作校驗的自定義錯誤提示信息,往往使用map類型傳遞,具體看后續(xù)代碼示例。
注意問題TIPS
在數據校驗對象的CheckValue/CheckMap/CheckStruct方法中,不存在Context上下文變量參數,而是通過鏈式操作的Ctx方法來控制。
GoFrame的g模塊中定義了Validator方法來快捷創(chuàng)建校驗對象:官方也推薦我們使用g模塊的g.Validator()方式來快捷創(chuàng)建一個校驗對象。
鏈式操作
示例1:單數據校驗
簡單示例
err := g.Validator().Rules("min:60").Messages("考試不及格").CheckValue(16)
fmt.Println(err.String()) //打印結果:考試不及格
進階示例
package main
import (
"fmt"
"github.com/gogf/gf/frame/g"
)
func main() {
data := g.Map{
"password": "123", //這個的作用僅是定義了這個結構設置了默認值,并不代表著傳入了值
}
//Data()中的參數是需要進行校驗的數據集合,常用于map或者結構體類型。
//CheckValue()是輸入的參數
err := g.Validator().Data(data).Rules("required-with:password").Messages("請輸入確認密碼").CheckValue("")
if err != nil {
fmt.Println("CheckValue傳入為空時:" + err.String()) // 請輸入確認密碼
} else {
fmt.Println("CheckValue傳入為空時:校驗通過")
}
err = g.Validator().Data(data).Rules("required-with:password").Messages("請輸入確認密碼").CheckValue("1")
if err != nil {
fmt.Println("CheckValue傳入不為空時:" + err.String()) // 請輸入確認密碼
} else {
fmt.Println("CheckValue傳入不為空時:校驗通過")
}
}
進階示例打印結果

示例2:Map數據校驗
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": "賬號不能為空|賬號長度應當在: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": "賬號長度應當在6到16之間",
"required": "賬號不能為空"
},
"password": {
"same": "兩次密碼輸入不相等"
}
}
示例3:Struct數據校驗
type User struct {
Name string `v:"required#請輸入用戶姓名"`
Type int `v:"required#請選擇用戶類型"`
}
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:請選擇用戶類型]]]
}
總結
這篇文章為大家介紹了GoFrame數據校驗之校驗對象的知識點,包括:Validator對象常用方法的介紹、單數據校驗、校驗Map、校驗結構體的示例。
更多關于GoFrame校驗結構體的資料請關注腳本之家其它相關文章!
相關文章
Go語言實現一個簡單的并發(fā)聊天室的項目實戰(zhàn)
本文主要介紹了Go語言實現一個簡單的并發(fā)聊天室的項目實戰(zhàn),文中根據實例編碼詳細介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
Golang的循環(huán)中break和continue語句的用法講解
這篇文章主要介紹了Golang的循環(huán)中break和continue語句的用法講解,是Go語言入門學習中的基礎知識,需要的朋友可以參考下2015-10-10
Golang?統(tǒng)計字符串中數字字母數量的實現方法
這篇文章主要介紹了Golang?統(tǒng)計字符串中數字字母數量,本文給出了兩種從字符串獲取數字與字母數量的方法,分別是ASCII 碼值和正則表達式,需要的朋友可以參考下2022-06-06
Go語言并發(fā)編程之互斥鎖Mutex和讀寫鎖RWMutex
Go 語言中提供了很多同步工具,本文將介紹互斥鎖Mutex和讀寫鎖RWMutex的使用方法,想要具體了解的小伙伴,請參考下面文章詳細內容,希望對你有所幫助2021-10-10

