Go语言参数校验(go-playground / validator)
生活随笔
收集整理的這篇文章主要介紹了
Go语言参数校验(go-playground / validator)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基本使用Go語言沒有像Java一樣的注解快速進行參數的校驗,但可以通過struct tag(結構體標簽)進行序列化。常用的如:
type User struct {ID string `json:"id"`Name string `json:"name"`Age string `json:"age"` }但需要更復雜的校驗,這時需要用一些專業的庫來完成。go-playground / validator作為一款優秀的Go語言校驗庫,基于標記為結構體和單個字段實現值驗證。使用簡單、快捷。
添加依賴
go get github.com/go-playground/validator代碼
package mainimport ("fmt""github.com/go-playground/validator" )var validate *validator.Validate //定義type User struct {Name string `validate:"required"` //非空Age uint8 `validate:"gte=0,lte=120"` // 0<=Age<=120Email string `validate:"required,email"` //非空,email格式//dive關鍵字代表 進入到嵌套結構體進行判斷Address []*Address `validate:"dive"` // 可以擁有多個地址 } type Address struct {Province string `validate:"required"` //非空City string `validate:"required"` //非空Phone string `validate:"numeric,len=11"` //數字類型,長度為11 }func main() {validate = validator.New() //初始化(賦值)validateStruct() //結構體校驗validateVariable() //變量校驗 } func validateStruct() {address := Address{Province: "北京",City: "北京",Phone: "17694911282x",}user := User{Name: "朝陽",Age: 23,Email: "cy@inke.cn",Address: []*Address{&address},}err := validate.Struct(user)if err != nil {//斷言為:validator.ValidationErrors,類型為:[]FieldErrorfor _, e := range err.(validator.ValidationErrors) {fmt.Println("Namespace:", e.Namespace())fmt.Println("Field:", e.Field())fmt.Println("StructNamespace:", e.StructNamespace())fmt.Println("StructField:", e.StructField())fmt.Println("Tag:", e.Tag())fmt.Println("ActualTag:", e.ActualTag())fmt.Println("Kind:", e.Kind())fmt.Println("Type:", e.Type())fmt.Println("Value:", e.Value())fmt.Println("Param:", e.Param())fmt.Println()}fmt.Println("結構體輸入數據類型錯誤!")return} else {fmt.Println("結構體校驗通過")} }//變量校驗 func validateVariable() {myEmail := "123@qq.com" //郵箱地址:xx@xx.comerr := validate.Var(myEmail, "required,email")if err != nil {fmt.Println(err)} else {fmt.Println("變量校驗通過!")} } 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Go语言参数校验(go-playground / validator)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mac 每次都要执行source ~/.
- 下一篇: Golang 中的指数符号 e