You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在OpenAPI描述中添加自定义验证标签以生成带验证的Go结构体?

问题:如何在OpenAPI中配置以自动生成带自定义验证标签的Go结构体?

我正在学习用Go语言对接OpenAPI规范,已编写YAML文件用于生成请求和响应的Go结构体。部分结构体需要自定义验证器,我已通过以下代码实现并注册了email验证器:

var validate *validator.Validate

func init() {
  validate = validator.New()
  if err := validate.RegisterValidation("email", validateEmail); err != nil {
    logger.Fatalf("Couldn't register email validator, err=%v", err)
  }
}

func validateEmail(fl validator.FieldLevel) bool {
  email := fl.Field().String()

  emailRegex := `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`

  return regexp.MustCompile(emailRegex).MatchString(email)
}

现在我可以手动在结构体中使用validate:"email"标签:

type SomeStruct struct {
  Email string `validate:"email"`
}

请问能否在OpenAPI描述中配置相关内容,以自动生成带有该自定义验证标签的Go结构体?

解决方案

  • 使用Go生态中常用的OpenAPI代码生成工具oapi-codegen,可以通过自定义扩展字段实现这个需求。在OpenAPI的YAML文件里,给需要添加验证标签的字段加上x-go-validator扩展,指定你的自定义验证规则名称:
components:
  schemas:
    SomeStruct:
      type: object
      properties:
        Email:
          type: string
          x-go-validator: "email"
  • 执行代码生成命令时,需要启用validator标签生成功能,加上--enable-validator参数:
oapi-codegen --package api --enable-validator openapi.yaml > api/api.go
  • 生成后的Go结构体将自动带上validate:"email"标签:
type SomeStruct struct {
    Email string `json:"Email" validate:"email"`
}
  • 注意:生成工具只负责添加验证标签,自定义验证逻辑(比如你写的validateEmail函数)需要提前在代码中注册好,才能让验证器正常工作。

内容的提问来源于stack exchange,提问作者Cross

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 06:42:39