1、下发的接口参数
//不进行参数检验一般写法
type QuerySetIp struct {
IP string `json:"ip"`
Netmask string `json:"netmask"`
Gateway string `json:"gateway"`
Dns string `json:"dns"`
}
//参数校验写法
type QuerySetIp struct {
IP string `json:"ip" validate:"required"`
Netmask string `json:"netmask" validate:"required"`
Gateway string `json:"gateway" validate:"required"`
Dns string `json:"dns" validate:"required"`
}
2、参数校验
func ValidateFunc(daf interface{}) string {
// 实例化验证对象
var validate = validator.New()
err := validate.Struct(daf)
if err != nil {
trans := validateTransInit(validate)
verse := err.(validator.ValidationErrors)
for _, value := range verse.Translate(trans) {
return value
}
}
return ""
}
// 数据验证翻译器
func validateTransInit(validate *validator.Validate) ut.Translator {
// 万能翻译器,保存所有的语言环境和翻译数据
uni := ut.New(zh.New())
// 翻译器
trans, _ := uni.GetTranslator("zh")
//验证器注册翻译器
err := zhTranslations.RegisterDefaultTranslations(validate, trans)
if err != nil {
fmt.Println(err)
}
return trans
}
//使用示例
validateMsg := ValidateFunc(data)
if len(validateMsg) > 0 {
logconfig.SugarLogger.Errorf("数据校验不通过:%v", err)
}