第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Golang:將字符串類型的結(jié)構(gòu)字段驗(yàn)證為特定值之一

Golang:將字符串類型的結(jié)構(gòu)字段驗(yàn)證為特定值之一

Go
Smart貓小萌 2023-01-03 11:27:57
高朗版本:1.18.3驗(yàn)證器:github.com/go-playground/validator/v10我想在加載到嵌套結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)后驗(yàn)證傳入的 JSON 有效負(fù)載。這是我傳入的 JSON 負(fù)載,{  "name": "Duro",  "gender": "MALE",  "tier": 3,  "mobileNumber": "0356874586",  "address": {    "city": "Tokyo",    "street": "Shibaura St"  },  "children":[    {      "title": "Mr",      "lastName": "Takayashi"    }  ],  "isEmployed": false,  "requestedAt": "2022-01-10T03:30:12.639Z"}這是我的 user.go 文件,package maintype User struct {        Name                   string                     `validate:"required"`        Gender                 string                     `validate:"required,oneof=MALE FEMALE"`        Tier                   *uint8                     `validate:"required,eq=0|eq=1|eq=2|eq=3"`        MobileNumber           string                     `validate:"required"`        Email                  string        Address                *Address  `validate:"required"`        Children               []Child   `validate:"required,dive"`        IsEmployed             *bool     `validate:"required"`        PreferredContactMethod string    `validate:"oneof=EMAIL PHONE POST SMS"`        RequestedAt            time.Time `validate:"required"`    }    type Address struct {        City   string `validate:"required"`        Street string `validate:"required"`    }        type Child struct {        Title     string `validate:"required"`        FirstName string        LastName  string `validate:"required"`    }這是我的測試功能func TestUserPayload(t *testing.T) {    validate := validator.New()    var u User此測試因錯(cuò)誤而失敗,error Key: 'User.PreferredContactMethod' Error:Field validation for 'PreferredContactMethod' failed on the 'oneof' tag發(fā)生這種情況是因?yàn)?Go 將空字符串分配給 User.PreferredContactMethod 結(jié)構(gòu)字段。因?yàn)镻referredContactMethod不是必填字段,所以當(dāng) json 有效負(fù)載沒有它時(shí),我不想看到這個(gè)驗(yàn)證錯(cuò)誤。當(dāng) json 有效負(fù)載沒有preferredContactMethod字段時(shí),如何避免出現(xiàn)此錯(cuò)誤消息?如果您有更好的替代方案來實(shí)現(xiàn)此驗(yàn)證,也很高興聽到它們。這是Go Playground 中的代碼
查看完整描述

2 回答

?
慕碼人2483693

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊

與omitempty一起使用oneof使驗(yàn)證程序庫忽略空值或未設(shè)置的值。


type User struct {

        Name                   string                     `validate:"required"`

        Gender                 string                     `validate:"required,oneof=MALE FEMALE"`

        Tier                   *uint8                     `validate:"required,eq=0|eq=1|eq=2|eq=3"`

        MobileNumber           string                     `validate:"required"`

        Email                  string

        Address                *Address  `validate:"required"`

        Children               []Child   `validate:"required,dive"`

        IsEmployed             *bool     `validate:"required"`

        PreferredContactMethod string    `validate:"omitempty,oneof=EMAIL PHONE POST SMS"`

        RequestedAt            time.Time `validate:"required"`

    }


查看完整回答
反對(duì) 回復(fù) 2023-01-03
?
HUWWW

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個(gè)贊

使用https://github.com/marrow16/valix ( https://pkg.go.dev/github.com/marrow16/valix ) 可以通過以下方式實(shí)現(xiàn):


package main


import (

    "fmt"

    "time"


    "github.com/marrow16/valix"

)


type User struct {

    Name                   string    `json:"name" v8n:"required, notNull"`

    Gender                 string    `json:"gender" v8n:"required, notNull, &strtoken{['MALE','FEMALE']}"`

    Tier                   uint8     `json:"tier" v8n:"required, notNull, &mini{0}, &maxi{3}"`

    DateOfBirth            string    `json:"dateOfBirth" v8n:"notNull, &strisod"`

    MobileNumber           string    `json:"mobileNumber" v8n:"required, notNull, &strpatt{'^([0-9]{8,16})$'}"`

    Email                  string    `json:"email" v8n:"notNull"`

    Address                Address   `json:"address" v8n:"required, notNull"`

    Children               []Child   `json:"children" v8n:"required, notNull"`

    IsEmployed             bool      `json:"isEmployed" v8n:"required"`

    PreferredContactMethod string    `json:"preferredContactMethod" v8n:"notNull, &strtoken{['EMAIL','PHONE','POST','SMS']}"`

    RequestedAt            time.Time `json:"requestedAt" v8n:"required, notNull, &strisodt"`

}

type Address struct {

    City   string `json:"city" v8n:"required, notNull"`

    Street string `json:"street" v8n:"required, notNull"`

}


type Child struct {

    Title     string `json:"title" v8n:"required, notNull"`

    FirstName string `json:"firstName" v8n:"notNull"`

    LastName  string `json:"lastName" v8n:"required, notNull"`

}


const jsonData = `{

  "name": "Duro",

  "gender": "MALE",

  "tier": 3,

  "dateOfBirth": "2000-01-13",

  "mobileNumber": "0356874586",

  "address": {

    "city": "Tokyo",

    "street": "Shibaura St"

  },

  "children":[

    {

      "title": "Mr",

      "lastName": "Takayashi"

    }

  ],

  "isEmployed": false,

  "requestedAt": "2022-01-10T03:30:12.639Z"

}`


var UserRequestValidator = valix.MustCompileValidatorFor(User{}, nil)


func main() {

    user := User{}


    ok, violations, _ := UserRequestValidator.ValidateStringInto(jsonData, &user)


    if ok {

        fmt.Println("Validation successful")

    } else {

        fmt.Println(fmt.Sprintf("Validation failed! (violations: %d)", len(violations)))

        for _, v := range violations {

            fmt.Printf("%s (property: '%s', path: '%s')\n", v.Message, v.Property, v.Path)

        }

    }

}

在這里去游樂場:https ://go.dev/play/p/3zrkZx97m-e


披露:我是 Valix 的作者


查看完整回答
反對(duì) 回復(fù) 2023-01-03
  • 2 回答
  • 0 關(guān)注
  • 181 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)