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

Golang API开发:如何在Swaggo文档中省略指定结构体字段?

解决Swaggo文档中省略结构体指定字段的问题

我刚好也遇到过类似的场景,给你分享几个实用的解决方案,你可以根据项目情况选择:

方案1:创建独立的请求结构体(最推荐)

其实请求体和响应体本来就应该分开定义,这样既符合代码设计的单一职责原则,也能完美解决字段过滤的问题。你可以专门为“执行计算”接口创建一个请求结构体:

// CalcRequest 执行计算的请求参数结构体
type CalcRequest struct {
    Value1 int64 `json:"value1" swagger:"description,参与计算的第一个数值"`
    Value2 int64 `json:"value2" swagger:"description,参与计算的第二个数值"`
}

然后在你的接口注释里,把请求体指定为这个CalcRequest:

// @Summary 执行计算
// @Accept json
// @Produce json
// @Param calc body CalcRequest true "计算请求参数"
// @Success 200 {object} calc "计算结果"
// @Router /calculations [post]
func performCalc(c *gin.Context) {
    // 接口逻辑
}

原来的calc结构体可以继续作为“获取所有计算记录”接口的响应体使用,这样两个接口的文档字段就完全符合需求了。

方案2:使用Swaggo的swaggerignore标签(适合临时场景)

如果不想额外定义结构体,你可以直接在原结构体的目标字段上添加swaggerignore:"true"标签,让Swaggo在生成文档时忽略这些字段:

type calc struct {
    ID     int64 `json:"id" swaggerignore:"true"`
    Value1 int64 `json:"value1"`
    Value2 int64 `json:"value2"`
    Result int64 `json:"result" swaggerignore:"true"`
}

⚠️ 注意:这个标签是全局生效的,也就是说如果你的“获取所有计算记录”接口需要展示ID和Result字段,那这个方案就不适用了,因为文档里会把这些字段全部隐藏。

方案3:手动指定请求体结构(不推荐)

你也可以在接口的Swaggo注释里,直接手动编写请求体的JSON结构,绕过结构体的字段限制:

// @Summary 执行计算
// @Accept json
// @Produce json
// @Param request body {"value1": 0, "value2": 0} true "计算请求参数,仅需传入value1和value2"
// @Success 200 {object} calc
// @Router /calculations [post]
func performCalc(c *gin.Context) {
    // 接口逻辑
}

这种方式虽然能解决问题,但手动写JSON容易出错,而且后续修改结构体字段时,文档不会自动同步,维护成本很高,所以只推荐应急使用。


内容的提问来源于stack exchange,提问作者Marcelo Gonçalves

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:12:08