【Gin框架基础使用附带各种小案例和简易登录模块的实现】

前言:

Gin框架介绍

  1. Gin框架功能:
    在介绍Gin框架之前我们要先明白Gin框架要完成那些功能,当用户在浏览器发送一条url的时候(前端发起请求),我们后端要如何接受这个请求,如果接受这个请求的话,如何获取这条请求携带的参数,并且在接受任何请求进行真正的处理函数之前,如果要进行统一的操作(如权限验证等),应该如何设置。以上是Gin框架最最最主要的功能。而满足这些功能的框架都被统称为Http Web框架,因此Gin是一个Go的web框架。

使用示例

安装Gin框架

  1. 前提条件:安装好Go并能正常使用
  2. 使用步骤:
    打开终端窗口,运行以下命令:
    $ go get -u github.com/gin-gonic/gin
    如果你使用了Go包管理工具,例如go mod,但是如果你不确定,那么运行上述命令总是不会错的。

使用代码

package main

import (
    "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.监听端口,默认在8080
   engine.Run(":8080")
}

接收参数的方法

  1. Param方式
    name := c.Param("name")
    一般是url中的通配符参数,如浏览器中输入:https://blog.csdn.net/m0_64941684?spm=1000.2115.3001.5343,浏览器会输出:name=m0_64941684。
  2. Query方式
    name := c.DefaultQuery("name", "晴天阿良"),前端有则用前端的,没有则默认为晴天阿良
    name := c.Query从前端获取
  3. PostForm方式
    username := c.PostForm("username")
    一般是post请求的表单参数
  4. body方式
package main

import (
   "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.User
	if 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 main

import (
    "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.监听端口,默认在8080
   engine.Run(":8080")
}
func LoginHandler(c *gin.Context) {
	var u models.User
	if 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的边角料

  1. Gin 是使用 Go/golang 语言实现的 HTTP Web 框架。接口简洁,性能极高。截止 1.4.0 版本,包含测试代码,仅14K,其中测试代码 9K 左右,也就是说框架源码仅 5K 左右。
  2. 路由功能强大:Gin提供了灵活的路由机制,支持RESTful API设计,并且可以很容易地定义复杂的路由规则。(以后会深入讲解Gin的前缀树,路由树,异常处理,模板渲染,JSON解析与绑定,监控和日志等功能)
  3. WebSocket支持:Gin框架内置了对WebSocket的支持,方便实现实时通信功能。(以后也会深入讲解)
  4. 社区活跃:Gin有着一个活跃的社区,提供了大量的第三方扩展包和插件。
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值