91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用GoFrame校驗對象和校驗結構體

發布時間:2022-06-21 09:19:54 來源:億速云 閱讀:108 作者:iii 欄目:開發技術

這篇文章主要介紹“怎么使用GoFrame校驗對象和校驗結構體”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“怎么使用GoFrame校驗對象和校驗結構體”文章能幫助大家解決問題。

    基本概念

    數據校驗組件提供了數據校驗對象:用于數據校驗統一的配置管理,支持我們便捷的進行鏈式操作。

    方法介紹

    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()方法用于創建一個新的校驗對象。

    • CheckValue/CheckMap/CheckStruct方法用于特定參數類型的數據校驗,我們在項目開發中使用比較多的是CheckStruct,也建議大家使用CheckStruct。

    • Ctx()方法用于傳遞Context上下文變量。

    • I18n()方法用于設置當前校驗對象的I18N國際化組件,默認情況下,校驗組件使用的是框架全局默認的i18n組件對象。

    • Data()方法用于設置需要校驗的數據集合,支持map類型或者struct類型。

    • Rules()方法用于傳遞當前鏈式操作校驗的自定義校驗規則,支持使用[]string類型或者map類型。

    • Messages()方法用于傳遞當前鏈式操作校驗的自定義錯誤提示信息,往往使用map類型傳遞,具體看后續代碼示例。

    注意問題TIPS

    在數據校驗對象的CheckValue/CheckMap/CheckStruct方法中,不存在Context上下文變量參數,而是通過鏈式操作的Ctx方法來控制。

    GoFrame的g模塊中定義了Validator方法來快捷創建校驗對象:官方也推薦我們使用g模塊的g.Validator()方式來快捷創建一個校驗對象。

    鏈式操作

    示例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傳入不為空時:校驗通過")
       }
    }
    進階示例打印結果

    怎么使用GoFrame校驗對象和校驗結構體

    示例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())
    }

    執行后,終端輸出:

    {
        "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校驗對象和校驗結構體”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    新闻| 安塞县| 康马县| 山东| 土默特左旗| 峨边| 应用必备| 揭西县| 龙井市| 临夏县| 临湘市| 土默特左旗| 黔西县| 海伦市| 成武县| 滁州市| 枣阳市| 乌苏市| 永福县| 普洱| 肇庆市| 菏泽市| 莫力| 邳州市| 同德县| 介休市| 阜康市| 金秀| 榆中县| 昌图县| 泽普县| 建湖县| 航空| 安吉县| 晋州市| 红河县| 湖南省| 北安市| 金坛市| 尉犁县| 太和县|