这是我的设计:
type Handler func(c *gin.Context)
func PreExecute(c *gin.Context, handle_func Handler) Handler {
if c.User.IsAuthorized {
return handle_func
} else {
return some_error_handle_func
}
}
我希望通过PreExecute来装饰每个处理程序,就像Python中的装饰一样。所以我在golang中寻找一些std :: bind函数来使PreExecute与Handler完全相同的签名
我的期望:
handler = std::bind(PreExecute, _1, handler) // where _1 hold the position for parameter `c *gin.Context`
某些函数,如std :: bind
我怎么能在Golang中这样做?有没有更优雅的方法来实现这项工作?
答案 0 :(得分:2)
关闭,这是我的解决方案:
handler_new = func(c *gin.Context){ return PreExecute(c, handler_old)(c) } // since there is no return value of handler, so just do not use `return` statements, I will not correct this error
然后handler_new可以用作:
handler_new(some_context)
与
相同handler_new = std::bind(PreExecute, _1, handler_old)
在C ++中