Go语言使用Gin Gonic框架出现invalid receiver错误如何解决
问题排查
- 错误
cannot define new methods on non-local type gin.Context:Go 语法明确限制,不允许为非当前包定义的类型新增自定义方法,gin.Context属于gin框架对外暴露的内置类型,不属于你的项目main包,因此不能给它绑定Hi方法。 - 错误
undefined: Hi:你将Hi定义为*gin.Context的成员方法,而非当前包的全局函数,因此在main函数中直接引用Hi标识符时找不到对应定义。
正确实现方式
Gin路由要求的处理函数类型是gin.HandlerFunc,底层签名为func(*gin.Context),你只需要将非匿名函数定义为符合该签名的全局普通函数,不需要绑定到任何类型上,直接将函数名传入路由注册方法即可,示例代码如下:
package main import ( "net/http" "github.com/gin-gonic/gin" ) func main() { router := gin.Default() // 直接传入全局函数名即可完成注册 router.GET("/hi/", Hi) router.Run(":8080") } // Hi 定义为符合gin.HandlerFunc签名的普通全局函数 func Hi(c *gin.Context) { c.String(http.StatusOK, "Hello") }
内容的提问来源于stack exchange,提问作者cordmana
相关产品推荐
相关产品推荐

