Gin框架错误:无法将func(context *gin.Context) bool作为gin.HandlerFunc传入
解决Gin HandlerFunc类型不匹配问题
问题根源很明确:gin.HandlerFunc的签名是func(*gin.Context),无返回值,但你的GetTest函数返回bool(另外注意Go里布尔类型是bool而非boolean,这个语法错误得先修正),所以类型无法直接兼容。
给你两种可行的解决方式:
方式一:修改原函数适配HandlerFunc签名
直接调整GetTest的返回值,让它符合Gin处理器的要求:
// 修正布尔类型为bool,同时去掉返回值 func (x *Controller) GetTest(context *gin.Context) { ... // 如果之前返回true/false是用来控制请求流程,可改用Gin的上下文方法: // 处理失败时终止请求:context.AbortWithStatus(http.StatusInternalServerError) // 处理成功则继续:context.Next()(若后续还有中间件) }
修改后就可以直接传入x._controller.GetTest了。
方式二:包装适配器函数(不修改原函数)
如果不想改动GetTest的原有逻辑,就写一个匿名函数作为适配器,处理原函数的返回值:
converterTest.GET("/test", middleware.Auth(), func(c *gin.Context) { // 调用原函数,忽略返回值 x._controller.GetTest(c) // 或者根据返回值做额外处理,比如返回false时终止请求 // success := x._controller.GetTest(c) // if !success { // c.AbortWithStatus(http.StatusBadRequest) // return // } })
内容的提问来源于stack exchange,提问作者BenDou
相关产品推荐
相关产品推荐

