我是golang 的新手
我已经使用golang创建了一个REST服务。我正试图添加validaiton,但我被卡住了。
我有两个类似的结构
type Item struct {
ProductId string `json:"prodId"`
SkuId string `json:"skuId"`
Qty string `json:"qty"`
}
type AddItemsRequest struct {
Items []Item `json:"items" validate:"required"`
}
我正在尝试验证AddItemsRequest
我添加了以下代码来处理这个
func (r * Item) Validate() error {
return types.ErrorMap{
"prodId": validation.Validate(&r.ProductId, validation.Required, validation.Length(1, 255)),
"skuId": validation.Validate(&r.SkuId, validation.Required, validation.Length(1, 255)),
"qty": validation.Validate(&r.Qty, validation.Required, validation.Length(1, 255)),
}
}
func (r AddItemsRequest) Validate() error {
return validation.ValidateStruct(&r,
validation.Field(&r.Items, validation.Each(is.Alpha))) // Instead of Alpha how to validate each items with my Items rule
}
但我不愿意立即离开。如何添加验证代码,使请求中的项目不为空或为空,并且只有String?
我不知道什么是验证,但我可以使用"github.com/go操场/validator"来解决这个问题。
func main() {
v := validator.New()
v.RegisterValidation("mySlice", func(fl validator.FieldLevel) bool {
sli, ok := fl.Field().Interface().([]string)
if !ok {
return false
}
for i := range sli {
if len(sli[i]) < 5 {
return false
}
}
return true
}, false)
sli := []string{"hello world", "hi", "congratulation"}
err := v.Var(sli, "mySlice")
if err != nil {
panic("check error: " + err.Error())
}
print("ok")
}