ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 用于数据校验: * #### 校验数据是否合法 ## **安装**: ~~~ go get github.com/astaxie/beego/validation ~~~ ## **测试**: ~~~ go test github.com/astaxie/beego/validation ​       ok     github.com/astaxie/beego/validation     0.449s ~~~ ## **beego中使用**: ~~~ func (l *LoginController) Post() {    name := l.GetString("name")    age := l.GetString("age")    addr := l.GetString("addr") ​    valid := validation.Validation{}    valid.Required(name,"name")   // 这里的key是valid.Errors中的key,用来获取err的key    valid.Required(age,"age")    valid.Required(addr,"addr") ​    if valid.HasErrors() {        // 如果有错误信息,证明验证没通过        // 打印错误信息        for _, err := range valid.Errors {            fmt.Println(err.Key, err.Message)            message := err.Key + err.Message            l.Ctx.WriteString(message)       }   } ​    l.TplName = "login.html" } ~~~ ## **自定义错误信息**: ~~~ valid.Required(name,"name").Message("用户名不能为空")   // 这里的key是valid.Errors中的key,用来获取err的key valid.Required(age,"age").Message("年龄不能为空") valid.Required(addr,"addr").Message("地址不能为空") ~~~ ## **解析到结构体并校验数据**: ~~~ type LoginParams struct {    Name string    Age int    Addr string } ​ ​ func (l *LoginController) Post() { ​    valid := validation.Validation{} ​    params := LoginParams{}    if err := l.ParseForm(&params); err != nil {        //handle error        return   }    valid.Required(params.Name,"name").Message("用户名不能为空")    valid.Required(params.Age,"age").Message("年龄不能为空")    valid.Required(params.Addr,"addr").Message("地址不能为空")    if valid.HasErrors() {        // 如果有错误信息,证明验证没通过        // 打印错误信息        for _, err := range valid.Errors {            fmt.Println(err.Key, err.Message)            message := err.Key + err.Message            l.Ctx.WriteString(message)       }   } ​    l.TplName = "login.html" } ~~~ ## **通过 StructTag校验数据:** * 验证函数写在 "valid" tag 的标签里 * 各个函数之间用分号 ";" 分隔,分号后面可以有空格 * 参数用括号 "()" 括起来,多个参数之间用逗号 "," 分开,逗号后面可以有空格 * 正则函数(Match)的匹配模式用两斜杠 "/" 括起来 * 各个函数的结果的 key 值为字段名.验证函数名 ~~~ type LoginParams struct {      Name string valid:"Required"      Age int    valid:"Required;MinSize(2)"      Addr string    valid:"Required" } ​ func (l *LoginController) Post() {        valid := validation.Validation{}     // 解析到结构体      params := LoginParams{}      if err := l.ParseForm(&params); err != nil {          //handle error          return     } ​      //重写错误信息:validation.SetDefaultMessage(map)      var messages = map[string]string{        "Required": "不能为空",        "MinSize":  "最短长度为 %d",        "Length":   "长度必须为 %d",        "Numeric":  "必须是有效的数字",        "Email":    "必须是有效的电子邮件地址",        "Mobile":   "必须是有效的手机号码",     }      validation.SetDefaultMessage(messages) ​      // 校验      b, err := valid.Valid(&params) ​      // 验证StructTag 是否正确      if err != nil { ​          fmt.Println(err)     } ​      if !b {            // 验证没通过,则b为false          for _, err := range valid.Errors {              fmt.Println(err.Key, err.Message)              message := err.Key + err.Message              l.Ctx.WriteString(message)         }     } } ~~~ ### 多个StructTag之间用空格隔开