如何在多路复用器中设置路由变量
Posted
技术标签:
【中文标题】如何在多路复用器中设置路由变量【英文标题】:How to set route vars in mux 【发布时间】:2014-12-22 05:44:37 【问题描述】:我想将 2 个 url 绑定到 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')?
【问题讨论】:
【参考方案1】:创建一个设置 mux var 的处理程序包装器:
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)
包装用户控制器:
router.Handle("/_Users, &setVarWrapperfn:controller.AddResource, name:"resourceName", value:"_User")
一个更简单的选择是编写一个调用通用控制器的 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)
【讨论】:
以上是关于如何在多路复用器中设置路由变量的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin 协程协程中的多路复用技术 ① ( 多路复用技术 | await 协程多路复用 | Channel 通道多路复用 )