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)
}
}
測試
驗證時欄位值不符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
沒有留言:
張貼留言