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
相关产品推荐
相关产品推荐

