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

如何在go-swagger中将namespace参数传入自定义Handler函数?

问题:如何将namespace字符串传递给go-swagger对应的Handler函数?

我正在使用go-swagger,定义了如下API接口:

/somethings:
    get:
      produces:
      - text/plain
      tags:
      - somethings
      summary: some summary
      operationId: GetSomethings
      responses:
        "200":
          description: some summary
          schema:
            type: string

为此编写了对应的Handler函数:

package impl

func GetSomethingsHandlerFunc(params metrics.GetSomethingsParams, namespace string) middleware.Responder {
    return middleware.ResponderFunc....
}

其中自动生成的GetSomethingsParams结构体如下:

type GetMetricsParams struct {
    // HTTP Request Object
    HTTPRequest *http.Request `json:"-"`
}

在configureAPI函数中尝试这样设置,但无法正确传递namespace:

api.SomethingsGetHandler = somethings.GetSomethingsHandlerFunc(impl.GetSomethingsHandlerFunc, "some_namespace_value")

请问如何将namespace字符串(即"some_namespace_value")正确传递给impl.GetSomethingsHandlerFunc?


解决方案

go-swagger生成的GetSomethingsHandlerFunc适配器要求传入的函数必须符合**func(metrics.GetSomethingsParams) middleware.Responder**的签名,而你的impl.GetSomethingsHandlerFunc多了一个namespace参数,直接传递会出现签名不匹配的问题。

解决方法是使用闭包捕获namespace变量,将你的Handler函数转换成符合要求的签名:

api.SomethingsGetHandler = somethings.GetSomethingsHandlerFunc(func(params metrics.GetSomethingsParams) middleware.Responder {
    // 闭包捕获外部的namespace参数,传递给目标Handler
    return impl.GetSomethingsHandlerFunc(params, "some_namespace_value")
})

这样每次请求触发Handler时,闭包会自动将预先设置的namespace值传入你的impl.GetSomethingsHandlerFunc,既满足go-swagger的签名要求,又实现了参数传递。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 01:15:11