为了账号安全,请及时绑定邮箱和手机立即绑定

如何像 Javascript 的 Joi 一样验证 Go 对象数据?

如何像 Javascript 的 Joi 一样验证 Go 对象数据?

Go
呼如林 2023-05-22 17:18:44
我使用Joi在 JavaScript 中执行对象模式和数据验证。在 Golang 中,我知道如何进行模式验证,但我如何进行数据验证?Golang 是否有 Joi 等价物?我知道 Godog,但它还没有达到 1.0。
查看完整描述

1 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

尝试 ozzo-validation 

package main


import (

    "fmt"

    "regexp"


    "github.com/go-ozzo/ozzo-validation"

    "github.com/go-ozzo/ozzo-validation/is"

)


type Address struct {

    Street string

    City   string

    State  string

    Zip    string

}


func (a Address) Validate() error {

    return validation.ValidateStruct(&a,

        // Street cannot be empty, and the length must between 5 and 50

        validation.Field(&a.Street, validation.Required, validation.Length(5, 50)),

        // City cannot be empty, and the length must between 5 and 50

        validation.Field(&a.City, validation.Required, validation.Length(5, 50)),

        // State cannot be empty, and must be a string consisting of two letters in upper case

        validation.Field(&a.State, validation.Required, validation.Match(regexp.MustCompile("^[A-Z]{2}$"))),

        // State cannot be empty, and must be a string consisting of five digits

        validation.Field(&a.Zip, validation.Required, validation.Match(regexp.MustCompile("^[0-9]{5}$"))),

    )

}


func main() {

    a := Address{

        Street: "123",

        City:   "Unknown",

        State:  "Virginia",

        Zip:    "12345",

    }


    err := a.Validate()

    fmt.Println(err)

    // Output:

    // Street: the length must be between 5 and 50; State: must be in a valid format.

}


查看完整回答
反对 回复 2023-05-22
  • 1 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信