当前位置: 首页 > wzjs >正文

网站制作推荐新鸿儒网站设置的关键词

网站制作推荐新鸿儒,网站设置的关键词,用阿里巴巴做公司网站怎么样,不花钱网站怎么做github.com/go-playground/validator/v10 是 Go 语言中一个功能强大且广泛使用的数据验证库,主要用于对结构体字段进行数据校验,确保数据的合法性和完整性。以下是其核心作用、使用场景及代码案例的详细说明: 核心作用 数据校验 支持对结构体…

github.com/go-playground/validator/v10 是 Go 语言中一个功能强大且广泛使用的数据验证库,主要用于对结构体字段进行数据校验,确保数据的合法性和完整性。以下是其核心作用、使用场景及代码案例的详细说明:


核心作用

  1. 数据校验
    支持对结构体字段的多种校验规则(如必填、长度、范围、格式等),避免无效或恶意数据进入系统。
  2. 减少重复代码
    通过标签(Tag)定义校验规则,避免手动编写大量校验逻辑。
  3. 支持嵌套和复杂结构
    可校验嵌套结构体、切片、映射等复杂数据类型。
  4. 自定义校验规则
    允许开发者注册自定义校验函数,满足特定业务需求。
  5. 国际化支持
    支持多语言错误消息,便于国际化应用。

使用场景

  1. API 请求参数校验
    在处理 HTTP 请求时,校验用户输入的数据(如注册表单、登录参数等)。
  2. 配置文件校验
    验证配置文件中的参数是否符合预期格式。
  3. 数据库操作前校验
    在将数据存入数据库前,确保数据的合法性。
  4. 表单提交校验
    在 Web 或 CLI 应用中,校验用户提交的表单数据。

代码案例

1. 基本校验示例
package mainimport ("fmt""github.com/go-playground/validator/v10"
)type User struct {Name     string `validate:"required,min=3,max=20"` // 必填,长度3-20Email    string `validate:"required,email"`        // 必填,邮箱格式Age      int    `validate:"gte=18,lte=120"`        // 年龄范围18-120Password string `validate:"required,min=8"`         // 必填,最小长度8
}func main() {validate := validator.New()user := User{Name:     "Al",       // 长度不足Email:    "invalid",  // 无效邮箱Age:      15,         // 年龄不足Password: "123",      // 长度不足}err := validate.Struct(user)if err != nil {for _, err := range err.(validator.ValidationErrors) {fmt.Printf("Field: %s, Error: %s\n", err.Field(), err.Tag())}return}fmt.Println("Validation passed!")
}

输出

Field: Name, Error: min
Field: Email, Error: email
Field: Age, Error: gte
Field: Password, Error: min

2. 嵌套结构体校验
type Address struct {City    string `validate:"required"`ZipCode string `validate:"required,len=6"` // 邮编长度为6
}type UserWithAddress struct {Name    string  `validate:"required"`Address Address `validate:"required"` // 嵌套结构体必填
}func main() {validate := validator.New()user := UserWithAddress{Name: "Alice",Address: Address{City:    "New York",ZipCode: "123", // 长度不足},}err := validate.Struct(user)if err != nil {for _, err := range err.(validator.ValidationErrors) {fmt.Printf("Field: %s, Error: %s\n", err.Field(), err.Tag())}}
}

输出

Field: Address.ZipCode, Error: len

3. 自定义校验规则
func validatePasswordComplexity(fl validator.FieldLevel) bool {password := fl.Field().String()hasUpper := falsehasLower := falsehasDigit := falsefor _, char := range password {switch {case unicode.IsUpper(char):hasUpper = truecase unicode.IsLower(char):hasLower = truecase unicode.IsDigit(char):hasDigit = true}}return hasUpper && hasLower && hasDigit // 必须包含大小写字母和数字
}func main() {validate := validator.New()validate.RegisterValidation("password_complexity", validatePasswordComplexity)type User struct {Password string `validate:"required,password_complexity"`}user := User{Password: "abc123"} // 缺少大写字母err := validate.Struct(user)if err != nil {for _, err := range err.(validator.ValidationErrors) {fmt.Printf("Field: %s, Error: %s\n", err.Field(), err.Tag())}}
}

输出

Field: Password, Error: password_complexity

4. 结合 Gin 框架使用
package mainimport ("github.com/gin-gonic/gin""github.com/go-playground/validator/v10""net/http"
)type LoginRequest struct {Username string `json:"username" binding:"required,min=3"`Password string `json:"password" binding:"required,min=8"`
}func main() {r := gin.Default()r.POST("/login", func(c *gin.Context) {var req LoginRequestif err := c.ShouldBindJSON(&req); err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}c.JSON(http.StatusOK, gin.H{"message": "Login successful"})})r.Run(":8080")
}

测试请求

POST /login
{"username": "al",  // 长度不足"password": "123"   // 长度不足
}

响应

{"error": "Key: 'LoginRequest.Username' Error:Field validation for 'Username' failed on the 'min' tag\nKey: 'LoginRequest.Password' Error:Field validation for 'Password' failed on the 'min' tag"
}

总结

  • 作用validator/v10 是一个高效、灵活的数据校验库,适用于各种需要数据校验的场景。
  • 优势:支持复杂校验规则、嵌套结构、自定义校验和多语言错误消息。
  • 典型场景:API 参数校验、配置文件校验、表单提交校验等。

通过合理使用 validator/v10,可以显著提高代码的健壮性和可维护性。

http://www.dtcms.com/wzjs/541137.html

相关文章:

  • 做dw和ps的网站教学零基础网站开发要学多久
  • 昆明建设厅培训网站网站怎么拿百度收入
  • 怎么自己做论坛网站四川网站营销seo费用
  • 建设环境工程技术中心网站wordpress添加微信分享功能
  • 国外优秀电商设计网站杭州建站平台
  • 万户网络的网站安全吗服务器网站80端口打不开
  • 网站建设综合实训设计报告郑州网站建设的公司
  • 潍坊品牌网站建设公司厦门百度推广公司
  • 怎么做一个网站多少钱wordpress牛发卡插件
  • 土木特网站建设潍坊在线制作网站
  • 设计素材网站收益小型网站开发成本
  • 农药化肥网站建设wordpress付费会员
  • 爱做网站网址wordpress free 2017
  • 泉州制作网站公司网站swf怎么做
  • 网站建设必须经历的过程爱站网关键词怎么挖掘
  • 学做宝宝衣服网站手机端网站开发视频
  • 怎样查询网站空间给wordpress上锁
  • 四川网站建设的公司北京微网站建设公司
  • 无锡网站建设公司织梦后台怎么建设网站
  • 怎么做域名网站系统数据库与建设网站
  • 做图的赚钱的网站商务网站建设公
  • 网站程序上传完最新新闻热点
  • 西安专题门户响应式网站建设水电公司设计logo
  • 网站建设服务器要求wordpress实现点赞
  • 大型网站seo方法合肥app建设公司
  • 12316网站建设方案网站建设简单流程
  • 儿童做网站伪原创嵌入网站
  • 建设网站的群免费下载ppt模板的网站有哪些
  • 安徽建站贵吗vmware做网站步骤
  • 免费做网站教程一站式服务的好处