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

Gin框架基础使用附带各种小案例和整个登录模块的实现

    • 前言:
  • Gin框架介绍
  • 使用示例
    • 安装Gin框架
    • 使用代码
    • 接收参数的方法
  • 简易登录模块
  • 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 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")
}

接收参数的方法

  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 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的边角料

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/30904.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css记录:三维变换之transform

CSS 的 transform 属性用于对元素进行 2D 或 3D 转换。这些转换包括旋转、缩放、倾斜和移动等。在 3D 变换中,我们可以创建更为复杂和动态的效果,让用户体验更为丰富。 transform 属性 transform 是一个简写属性,用于设置以下 2D 和 3D 转换…

【Android】构建 Android Automotive OS:适合初学者的指南

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

vue脚手架 vuex模块化和四大辅助函数的结合使用

目录 01 四大辅助函数结合vuex模块化的使用 02 event-bus事件总线的使用 01 四大辅助函数结合vuex模块化的使用 mapState 在映射模块化带有命名空间的使用步骤: 方式一:(重要) ...mapState(模块名1,[该模块的变量1,该模块的变量2....]) ...mapState(模块名2,[该模块的变量1,该…

深入探究RTOS的IPC机制----邮箱

阅读引言: 因为将来工作需要, 最近在深入学习OS的内部机制,我把我觉得重要的、核心的东西分享出来, 希望对有需要的人有所帮助, 阅读此文需要读友有RTOS基础, 以及一些操作系统的基础知识, 学习…

行列式和矩阵的区别

目录 一、行列式 1. 行列式的定义 2. (全)排列 3. 逆序数 二、矩阵 1. 矩阵的定义 三、行列式和矩阵的区别 四、参考书目 一、行列式 1. 行列式的定义 2. (全)排列 3. 逆序数 二、矩阵 1. 矩阵的定义 三、行列式和矩阵的区别 四、参考书目 同济大学数学系. 工程数学…

【LeetCode面试经典150题】105. 从前序与中序遍历构造二叉树

一、题目 105. 从前序与中序遍历序列构造二叉树 - 力扣(LeetCode)给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 二、思路 …

Dynamics 365 on-premise 隐藏高级查找导出按钮

提示 着急可以直接看结果代码部分 背景 Dynamics 365 on-premise中有个高级查找的功能,查询的结果支持导出,如下图 业务反馈这个有数据安全风险,要修改显示规则。 一开始想着能用RibbonWorkbench改,就很爽快得答应了业务。结果用RibbonWorkbench改不了。 反复尝试 既…

Linux远程管理日志

实验介绍 本实验旨在实现主机将日志远程发送到堡垒机或远程服务器上,实现通过一台机器管理整个网络内的主机的效果。 准备两台虚拟机作为生产主机和管理机,保证网络通畅,展示如下: 关闭firewalld,通过配置rsyslog&a…

Sklearn之朴素贝叶斯应用

目录 sklearn中的贝叶斯分类器 前言 1 分类器介绍 2 高斯朴素贝叶斯GaussianNB 2.1 认识高斯朴素贝叶斯 2.2 高斯朴素贝叶斯建模案例 2.3 高斯朴素贝叶斯擅长的数据集 2.3.1 三种数据集介绍 2.3.2 构建三种数据 2.3.3 数据标准化 2.3.4 朴素贝叶斯处理数据 2.4 高斯…

Treeselect是介绍及使用(梳理了我使用这个组件遇到的大部分问题)

介绍: Treeselect是一款基于Vue.js的树形选择器组件,可以快速地实现树形结构的选择功能。 这里梳理了我使用这个组件遇到的大部分问题 安装依赖: 首先,你需要在你的项目中安装Treeselect的依赖。这通常可以通过npm或yarn等来完…

基于STM32和人工智能的智能农业监测系统

目录 引言环境准备智能农业监测系统基础代码实现:实现智能农业监测系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统4.4 用户界面与数据可视化应用场景:智能农业管理与优化问题解决方案与优化收尾与总结 1. 引言 智能农业监测系统通过结合STM32嵌…

Linux - 输入输出

一、输出格式 echo //末尾自带换行 -n //取消自带换行 -e //支持转移符 常见转义符 \n换行 \t制表符 printf // 格式化输出字符串 %-10s // %s代表字符串 -10 左对齐容纳10个字符 二、输入输出重定向 file descriptors &#x…

Java集合底层源码剖析-Vector和Stack

文章目录 概述Vector成员变量关键方法添加元素 (add, addElement)删除元素 (remove)注意事项 Stack类定义与继承压栈 (push)弹栈 (pop)查看栈顶元素 (peek)源码解析总结 概述 在Java中,Stack 类是一个基于 Vector 实现的经典栈数据结构。由于 Vector 类本身是线程安…

Python | Leetcode Python题解之第155题最小栈

题目: 题解: class MinStack:def __init__(self):self.stack []self.min_stack [math.inf]def push(self, x: int) -> None:self.stack.append(x)self.min_stack.append(min(x, self.min_stack[-1]))def pop(self) -> None:self.stack.pop()sel…

AD域离线破解新思路:Trustroasting和TimeRoasting

简介 近期Tom Tervoort发表了白皮书《TIMEROASTING, TRUSTROASTING AND COMPUTER SPRAYING》并在Github发布了名为Timeroast的工具包,其中介绍了几种新的攻击思路TimeRoasting、Trustroasting和计算机账户密码喷洒,本篇文章主要对TimeRoasting和Trustro…

从零开始:使用ChatGPT快速创作引人入胜的博客内容

随着科技的飞速发展,人工智能逐渐渗透到我们生活的各个领域。无论是商业、教育还是娱乐,AI技术都在以惊人的速度改变着我们。特别是在内容创作领域,人工智能正发挥着越来越重要的作用。今天,我将和大家分享如何从零开始&#xff0…

无约束动态矩阵控制(DMC)

0、前言 动态矩阵控制(Dynamic Matrix Control,DMC)是一种典型的模型预测控制方法,其不需要被控对象的数学模型,只需要获取被控对象的阶跃响应序列即可实现控制效果,但其需要被控对象是渐近稳定的。 1、稳…

SVN学习(002 svn冲突解决)

尚硅谷SVN高级教程(svn操作详解) 总时长 4:53:00 共72P 此文章包含第20p-第p29的内容 冲突 产生冲突的操作 (第一种 相互不影响的操作) 用户1修改第二行 用户2修改第四行 用户1提交 用户2提交,提交的时候会提示版本已过时 这时将用…

常见漏洞扫描工具

Fortify Fortify是Micro Focus旗下AST (应用程序安全测试)产品,其产品组合包括:Fortify Static Code Analyzer提供静态代码分析器(SAST),Fortify WebInspect是动态应用安全测试软件&#xff08…

Hadoop 2.0 大家族(一)

目录 一、Hadoop 2.0大家族概述(一)分布式组件(二)部署概述 二、ZooKeeper(一)ZooKeeper简介(二)ZooKeeper 入门 一、Hadoop 2.0大家族概述 (一)分布式组件 …