AdSense

網頁

2021/12/27

Golang go-playground/validator 簡單範例

go-playground/validator簡單範例。


validator package是用來驗證struct屬性欄位的工具,透過在屬性後方加上tag來設定屬性的驗證規則。

此外validator是gin框架預設使用的驗證器。


安裝

在專案根目錄以命令列執行go get github.com/go-playground/validator/v10下載validator package,目前的版本為v10

~/../go-demo$ go get github.com/go-playground/validator/v10
go: downloading github.com/go-playground/validator/v10 v10.9.0
...

在go程式中加上import "github.com/go-playground/validator/v10"匯入。


設定tag及驗證

下面struct Employee的每個屬性後的`...`為驗證用的tags,以validate:開頭後接""包夾的tags,如有多個用逗號分隔。以下是各tag的說明:


使用Validate.Struct(s interface{})進行驗證,若未通過驗證會回傳error

main.go

package main

import (
    "fmt"

    validator "github.com/go-playground/validator/v10"
)

type Employee struct {
    Id        int    `validate:"required"`                               // 必填
    Name      string `validate:"required,min=3"`                         // 必填,字數長度最小3
    Email     string `validate:"required,email"`                         // 必填,email格式
    Age       int    `validate:"max=65,omitempty"`                       // 數值最大65,忽略空值
    Contact   string `validate:"json"`                                   // JSON格式
    CreatedAt string `validate:"datetime=2006-01-02 15:04:05,omitempty"` // 日期格式yyyy-MM-dd hh:mm:ss,忽略空值
}

func main() {
    emp := Employee{
        Id:        1,
        Name:      "JJ",
        Email:     "JJ.abc.com",
        Age:       70,
        Contact:   "{\"name\": \"mary\", \"phones\": [\"0912345678\", \"0912654321\"]}",
        CreatedAt: "2021-12-27 22:12:45",
    }
    err := validator.New().Struct(emp) // validates
    if err != nil {
        fmt.Println(err)
    }
}

github


測試

驗證時欄位值不符tag規範返回錯誤訊息,例如上面執行後印出以下:

Key: 'Employee.Name' Error:Field validation for 'Name' failed on the 'min' tag
Key: 'Employee.Email' Error:Field validation for 'Email' failed on the 'email' tag
Key: 'Employee.Age' Error:Field validation for 'Age' failed on the 'max' tag


沒有留言:

AdSense