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

如何移除Swagger OpenAPI 2模型定义中的models.包前缀?

如何移除swaggo生成的OpenAPI模型中的models.前缀

问题场景

使用swag init为Go Web API生成OpenAPI 2规范时,生成的模型定义自动带上了models.包前缀(如models.Account),不符合仅保留结构体名称(如Account)的需求。

现有API注解

// @Summary Get Account
// @Schemes
// @Description Get account data from session token
// @Tags Account
// @Accept json
// @Produce json
// @Success 200 {object} models.Account
// @Router /account [get]
func (h *AccountController) GetAccount(c *gin.Context) {

}

现有模型定义

// Account model info
// @Description User account information
// @Description with user id, username, nickname, avatar, roles, guild avatar, and rank
type Account struct {
    ID          string   `json:"id" validate:"required"`
    Username    string   `json:"username" validate:"required"`
    Nick        string   `json:"nick"`
    Avatar      string   `json:"avatar" validate:"required"`
    Roles       []string `json:"roles" validate:"required"`
    GuildAvatar string   `json:"guildAvatar"`
    Rank        string   `json:"rank" validate:"required"`
}

当前生成的模型(带前缀)

definitions:
  models.Account:
    description: User account information with user id, username, nickname, avatar,
      roles, guild avatar, and rank
    properties:
      avatar:
        type: string
      guildAvatar:
        type: string
      id:
        type: string
      nick:
        type: string
      rank:
        type: string
      roles:
        items:
          type: string
        type: array
      username:
        type: string
    required:
    - avatar
    - id
    - rank
    - roles
    - username
    type: object

预期生成的模型(无前缀)

definitions:
  Account:
    description: User account information with user id, username, nickname, avatar,
      roles, guild avatar, and rank
    properties:
      avatar:
        type: string
      guildAvatar:
        type: string
      id:
        type: string
      nick:
        type: string
      rank:
        type: string
      roles:
        items:
          type: string
        type: array
      username:
        type: string
    required:
    - avatar
    - id
    - rank
    - roles
    - username
    type: object

解决方法

方法一:给结构体添加@name注解

在模型结构体的注释中添加// @name 目标名称,强制指定生成的模型名称:

// Account model info
// @Description User account information
// @Description with user id, username, nickname, avatar, roles, guild avatar, and rank
// @name Account
type Account struct {
    ID          string   `json:"id" validate:"required"`
    Username    string   `json:"username" validate:"required"`
    Nick        string   `json:"nick"`
    Avatar      string   `json:"avatar" validate:"required"`
    Roles       []string `json:"roles" validate:"required"`
    GuildAvatar string   `json:"guildAvatar"`
    Rank        string   `json:"rank" validate:"required"`
}

添加后重新执行swag init,生成的模型名称就会变成Account。

方法二:使用swag init的--model-name-strategy参数

执行swag init时添加--model-name-strategy simple参数,该参数会自动去掉模型名称中的包前缀,只保留结构体名称:

swag init --model-name-strategy simple

这种方式适合全局批量处理所有模型,无需逐个修改结构体注解。

方法三:配置swaggo全局规则(可选)

如果需要长期生效,可以在项目根目录创建swag.yaml配置文件,添加以下内容:

parse:
  modelNameStrategy: simple

之后执行swag init时会自动读取该配置,统一处理模型名称。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 16:03:15