Gin框架基础使用附带各种小案例和整个登录模块的实现
-
- Gin框架介绍
- 使用示例
-
- 简易登录模块
- Gin的边角料
前言:
Gin框架介绍
- Gin框架功能:
在介绍Gin框架之前我们要先明白Gin框架要完成那些功能,当用户在浏览器发送一条url的时候(前端发起请求),我们后端要如何接受这个请求,如果接受这个请求的话,如何获取这条请求携带的参数,并且在接受任何请求进行真正的处理函数之前,如果要进行统一的操作(如权限验证等),应该如何设置。以上是Gin框架最最最主要的功能。而满足这些功能的框架都被统称为Http Web框架,因此Gin是一个Go的web框架。
使用示例
安装Gin框架
- 前提条件:安装好Go并能正常使用
- 使用步骤:
打开终端窗口,运行以下命令:
$ go get -u github.com/gin-gonic/gin
如果你使用了Go包管理工具,例如go mod,但是如果你不确定,那么运行上述命令总是不会错的。
使用代码
package mainimport ("net/http"(Gin依赖的内置包)"github.com/gin-gonic/gin"
)
func main() {// 1.创建引擎engine := gin.Default()// 2. 注册接口engine.GET("/", func(c *gin.Context) {//具体接口需要执行的函数c.JSON(200, gin.H{"Status": 200, "Message": "成功", "Data": 响应主要数据": ""}})})// 3.监听端口,默认在8080engine.Run(":8080")
}
接收参数的方法
- Param方式
name := c.Param("name")
一般是url中的通配符参数,如浏览器中输入:https://blog.csdn.net/m0_64941684?spm=1000.2115.3001.5343,浏览器会输出:name=m0_64941684。 - Query方式
name := c.DefaultQuery("name", "晴天阿良")
,前端有则用前端的,没有则默认为晴天阿良
name := c.Query
从前端获取 - PostForm方式
username := c.PostForm("username")
一般是post请求的表单参数 - body方式
package mainimport ("github.com/gin-gonic/gin""net/http"
)
func main() {engine := gin.Default()// 2. 注册接口login := engine.Group("/login")//分组login.POST("/login", controller.LoginHandler)
}
func LoginHandler(c *gin.Context) {var u models.Userif err := c.ShouldBindJSON(&u); err != nil {ResponseErrorWithMsg(c, CodeInvalidParams, err.Error())return}
}
//用户结构体
type User struct {UserID string `json:"user_id" db:"user_id"`UserName string `json:"username" db:"username"`Password string `json:"password" db:"password"`Role int `json:"role" db:"role"`
}
简易登录模块
package mainimport ("net/http"(Gin依赖的内置包)"github.com/gin-gonic/gin"
)
func main() {// 1.创建引擎engine := gin.Default()// 2. 注册接口login := engine.Group("/login")//分组login.POST("/login", controller.LoginHandler) //登录(下面有登录的具体实现)login.POST("/signup", controller.SignUpHandler) //注册login.GET("/refresh_token", controller.RefreshTokenHandler) //刷新token// 3.监听端口,默认在8080engine.Run(":8080")
}
func LoginHandler(c *gin.Context) {var u models.Userif err := c.ShouldBindJSON(&u); err != nil {zap.L().Error("invalid params", zap.Error(err))ResponseErrorWithMsg(c, CodeInvalidParams, err.Error())return}//从数据库中取数据,这里是操作数据库(不是Gin框架的功能)没有重点实现,后面讲sqlx时会重点讲。if err := mysql.Login(&u); err != nil {ResponseError(c, CodeInvalidPassword)return}// 生成Token(具体的实现方法这里也没有重点介绍)Uint64Value, _ := strconv.ParseUint(u.UserID, 10, 64)aToken, rToken, _ := jwt.GenToken(Uint64Value)ResponseSuccess(c, gin.H{"accessToken": aToken,"refreshToken": rToken,"userID": u.UserID,"username": u.UserName,"role": u.Role,})
}
//用户结构体
type User struct {UserID string `json:"user_id" db:"user_id"`UserName string `json:"username" db:"username"`Password string `json:"password" db:"password"`Role int `json:"role" db:"role"`
}
Gin的边角料
- Gin 是使用 Go/golang 语言实现的 HTTP Web 框架。接口简洁,性能极高。截止 1.4.0 版本,包含测试代码,仅14K,其中测试代码 9K 左右,也就是说框架源码仅 5K 左右。
- 路由功能强大:Gin提供了灵活的路由机制,支持RESTful API设计,并且可以很容易地定义复杂的路由规则。(以后会深入讲解Gin的前缀树,路由树,异常处理,模板渲染,JSON解析与绑定,监控和日志等功能)
- WebSocket支持:Gin框架内置了对WebSocket的支持,方便实现实时通信功能。(以后也会深入讲解)
- 社区活跃:Gin有着一个活跃的社区,提供了大量的第三方扩展包和插件。