gpt4 book ai didi

go - 如何在多路复用器中设置路由变量

转载 作者:IT王子 更新时间:2023-10-29 02:05:38 26 4
gpt4 key购买 nike

我想将 2 个 url 绑定(bind)到 1 个函数,如下所示。

router.HandleFunc("/_Users", controller.AddResource)
router.HandleFunc("/Resources/{resourceName}", controller.AddResource)

“controller.AddResource”是一个全局函数。代码如下:

function AddResource(req *http.Request, w http.ResponseWriter){
vars := mux.Vars(req)
resourceName := vars["resourceName"]
data = request.Body
AddDataToResource(resourceName, data)
}

那么如何在第一个路由器中设置 vars(resourceName='_User')

最佳答案

创建一个设置多路复用变量的处理程序包装器:

type setVarWrapper struct {
fn func(http.ResponseWriter, *http.Request)
name string
value string
}

func (h *setVarWrapper) ServeHTTP(w http.ResponseWriter, r *http.Request) {
mux.Vars(req)[h.name] = h.value
h.fn(w, r)
}

包装用户 Controller :

router.Handle("/_Users, &setVarWrapper{fn:controller.AddResource, name:"resourceName", value:"_User"})

一个更简单的选择是编写一个调用通用 Controller 的 AddUser 函数:

function addUser(req *http.Request, w http.ResponseWriter){
mux.Vars(req)["resourceName"] = "_User"
controller.AddResource(w, req)
}

router.HandleFunc("/_Users", addUser)

也许更简单的方法是在处理程序中检查“”:

function AddResource(req *http.Request, w http.ResponseWriter){
vars := mux.Vars(req)
resourceName := vars["resourceName"]
if resourceName == "" {
resourceName = "_User"
}
data = request.Body
AddDataToResource(resourceName, data)
}

关于go - 如何在多路复用器中设置路由变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27597128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com