Go学习第十三章——Gin入门与路由
Go web框架——Gin入门与路由
- 1 Gin框架介绍
- 1.1 基础介绍
- 1.2 安装Gin
- 1.3 快速使用
- 2 路由
- 2.1 基本路由
- GET请求
- POST请求
- 2.2 路由参数
- 2.3 路由分组
- 基本分组
- 带中间件的分组
- 2.4 重定向
1 Gin框架介绍
github链接:https://github.com/gin-gonic/gin
中文文档:https://gin-gonic.com/zh-cn/docs/
学习链接(博主在bilibili有视频):http://www.fengfengzhidao.com/
1.1 基础介绍
Gin是一个轻量级的、高性能的web框架,由Golang语言开发。Gin的核心设计理念是提供快速建立API的开发方式,同时保持良好的性能和高度易用性。
下面是Gin框架的主要特点:
- 快速性能 – Gin采用了诸如Like-nginx等类似的底层库,因此Gin的性能非常高,可以达到每秒处理数百万个请求的水平。
- 简单易用 – Gin框架采用了类似于Martini的API设计,非常容易学习和使用。
- 模块化 – Gin的中间件机制使其易于构建和扩展应用程序。
- 松散耦合 – Gin的设计允许使用者在不破坏当前应用的前提下快速添加新的特性或更改现有特性。
- 适用范围广 – Gin的设计允许用户构建任何类型的web应用程序,包括API、代理、Websocket服务等。
除此之外,Gin框架还提供了大量的中间件来提供更加丰富的功能,例如日志、跨域请求、认证和授权、压缩等。
1.2 安装Gin
要求:Go 1.13 及以上版本
- 创建一个新项目
注意我们创建项目要添加一个国内的代理,不然下载会很慢或者失败
代理:GOPROXY=https://goproxy.cn,direct
- 下载并安装Gin
go get -u github.com/gin-gonic/gin
然后,我们会在go.mod里面会发现多了很多东西,这些就Gin,直接使用
- 安装postman
主要是用于对接口进行调试的工具,有类似的工具都可以,例如:Apifox
postman官网:https://www.postman.com/downloads/?utm_source=postman-home
1.3 快速使用
- 创建文件夹和文件
我这里创建了一个GinStudy01_HelloWord的文件夹,在里面又创建了一个main文件夹,在里面创建main文件
- 将 gin 引入到代码中:
import "github.com/gin-gonic/gin"
- (可选)如果使用诸如
http.StatusOK
之类的常量,则需要引入net/http
包:
import "net/http"
- 写代码
package mainimport ("github.com/gin-gonic/gin""net/http"
)func main() {router := gin.Default()router.GET("/index", func(c *gin.Context) {c.String(http.StatusOK, "Hello World")})// 启动方式一router.Run(":8000") // 监听并在 0.0.0.0:8000 上启动服务// 启动方式二// http.ListenAndServe(":8000", router)
}
然后运行,等待一会,成功后,游览器访问:http://127.0.0.1:8000/index,会发现有Hello World
router:=gin.Default()
:这是默认的服务器。使用gin的Default
方法创建一个路由Handler
;- 然后通过Http方法绑定路由规则和路由函数。不同于
net/http
库的路由函数,gin进行了封装,把request
和response
都封装到了gin.Context
的上下文环境中。 - 最后启动路由的Run方法监听端口。还可以用
http.ListenAndServe(":8080", router)
,或者自定义Http服务器配置。
2 路由
本文将介绍Gin框架的路由功能,包括路由的基本使用、路由参数、路由分组、重定向、请求响应和中间件等。
2.1 基本路由
Router是Gin框架中的一个HTTP路由。Gin框架使用Router来接受HTTP请求,并根据请求的路径和HTTP方法来判断执行的处理函数。
Gin框架的Router支持HTTP的所有方法:GET、POST、PUT、PATCH、DELETE、HEAD、OPTIONS。
我们首先需要引入gin包:
import "github.com/gin-gonic/gin"
然后创建一个Gin框架的Router:
r := gin.Default()
GET请求
使用GET方法,接受GET方式的HTTP请求。
func main() {r := gin.Default()r.GET("/hello", func(c *gin.Context) {c.String(http.StatusOK, "Hello World")})r.Run(":8080")
}
当我们访问http://localhost:8080/hello时,就能够在浏览器上看到输出了"Hello World"。
POST请求
使用POST方法,接受POST方式的HTTP请求。
import ("github.com/gin-gonic/gin""net/http"
)
// 这里只是把func给提出来,这样代码看起来更简洁了
func postRequest(c *gin.Context) {username := c.PostForm("username")password := c.PostForm("password")c.JSON(http.StatusOK, gin.H{"username": username,"password": password,})
}func main() {r := gin.Default()// post请求r.POST("/login", postRequest)r.Run(":8080")
}
当我们通过POST方式,访问http://localhost:8080/login,然后通过POST方法提交username和password参数,就能够在返回结果中看到我们提交的参数值。
至于其他的请求,略。。。。
2.2 路由参数
Gin框架中的Router支持动态路由参数,在路由路径中使用冒号加参数名的方式表示参数。
func main() {r := gin.Default()r.GET("/users/:id", func(c *gin.Context) {id := c.Param("id")c.String(http.StatusOK, "User ID: %s", id)})r.Run(":8080")
}
使用Param方法获取路由中的参数值。
当我们访问http://localhost:8080/users/123时,就能够在浏览器上看到输出了"User ID: 123"。
2.3 路由分组
Gin框架的Router也支持路由分组,可以按照功能分组路由,这样能够更好地管理代码,并且能够为每个路由分组设置不同的中间件。
基本分组
我们可以使用Gin框架的Group方法将路由按照功能进行分组。
func main() {r := gin.Default()api := r.Group("/api"){api.GET("/users", func(c *gin.Context) {c.String(http.StatusOK, "API Users")})api.GET("/products", func(c *gin.Context) {c.String(http.StatusOK, "API Products")})}admin := r.Group("/admin"){admin.GET("/users", func(c *gin.Context) {c.String(http.StatusOK, "Admin Users")})admin.GET("/products", func(c *gin.Context) {c.String(http.StatusOK, "Admin Products")})}r.Run(":8080")
}
我们可以将API路由和管理员路由分别归为一个Group,并在Group中设置对应的路由处理函数。
当我们访问http://localhost:8080/api/users和http://localhost:8080/admin/users时,就能够在浏览器上看到输出了"API Users"和"Admin Users"。
带中间件的分组
中间件还没有讲解,等后面学到了,可以再回来看~
我们还可以在路由分组中指定中间件,这样能够更好地进行控制,对于需要进行身份验证或者请求限制的路由,我们需要通过Group进行中间件的指定。
func main() {r := gin.Default()api := r.Group("/api"){api.Use(AuthMiddleware())api.GET("/users", func(c *gin.Context) {c.String(http.StatusOK, "API Users")})api.GET("/products", func(c *gin.Context) {c.String(http.StatusOK, "API Products")})}admin := r.Group("/admin"){admin.Use(AuthMiddleware(), LimitMiddleware())admin.GET("/users", func(c *gin.Context) {c.String(http.StatusOK, "Admin Users")})admin.GET("/products", func(c *gin.Context) {c.String(http.StatusOK, "Admin Products")})}r.Run(":8080")
}
使用Use方法指定中间件,多个中间件可以通过逗号
分隔。
2.4 重定向
在Gin中,我们可以使用路由重定向功能将一条路由重定向到另一条路由。
func main() {r := gin.Default()r.GET("/users", func(c *gin.Context) {c.Redirect(http.StatusMovedPermanently, "/api/users")})r.GET("/api/users", func(c *gin.Context) {c.String(http.StatusOK, "API Users")})r.Run(":8080")
}
当我们访问http://localhost:8080/users时,Gin框架会将请求重定向到http://localhost:8080/api/users。
相关文章:

Go学习第十三章——Gin入门与路由
Go web框架——Gin入门与路由 1 Gin框架介绍1.1 基础介绍1.2 安装Gin1.3 快速使用 2 路由2.1 基本路由GET请求POST请求 2.2 路由参数2.3 路由分组基本分组带中间件的分组 2.4 重定向 1 Gin框架介绍 github链接:https://github.com/gin-gonic/gin 中文文档…...

[减脂期食谱] 自制千岛酱
[减脂期食谱] 自制千岛酱 成品如下: 最中间的那个,算比较居中的颜色吧,其实自己家做原版的千岛酱还是比较简单的,它的底就是蛋黄酱(蛋黄油乳化的酱),随后里面的材料比较自由,维基百科是这么介绍的…...

Android 系统架构
目录 Android 系统架构 1. Android 应用层 2. Android应用框架层 2.1 Activity Manager (活动管理器) 2.2 Window Manager (窗口管理器) 2.3 Content Provider (内容提供器) 2.4 View System(视图系统&a…...

【Docker】Python Flask + Redis 练习
一、构建flask镜像 1.准备文件 创建app.py,内容如下 from flask import Flask from redis import Redis app Flask(__name__) redis Redis(hostos.environ.get(REDIS_HOST,127.0.0.1),port6379)app.route(/) def hello():redis.incr(hits)return f"Hello Container W…...
shell_52.Linux测试与其他网络主机的连通性脚本
实战演练 本节将展示一个实用脚本,该脚本在处理用户输入的同时,使用 ping 命令或 ping6 命令来测试与其他网络主机的连通性。 ping 命令或 ping6 命令可以快速测试网络主机是否可用。这个命令很有用,经常作为首选工具。如果只是检查单个主机&…...

OpenCV C++ 图像处理实战 ——《缺陷检测》
OpenCV C++ 图像处理实战 ——《缺陷检测》 一、结果演示二、缺陷检测算法2.1、多元模板图像2.2、训练差异模型三、图像配准3.1 功能源码3.1 功能效果四、多元模板图像4.1 功能源码五、缺陷检测5.1 功能源码六、源码测试图像下载总结一、结果演示...
Python操作MySQL基础使用
Python操作MySQL基础使用 链接数据库并查询数据 import pymysql# 链接数据库 conn pymysql.connect(host10.5.6.250,port3306,userroot,password******** )# 查看MySQL版本信息 print(conn.get_server_info()) # 5.5.27# 获取到游标对象 cursor conn.cursor()# 选择数据库…...
【pytorch】pytorch中的高级索引
这里只介绍pytorch的高级索引,是一些奇怪的切片索引 基本版 a[[0, 2], [1, 2]] 等价 a[0, 1] 和 a[2, 2],相当于索引张量的第一行的第二列和第三行的第三列元素; a[[1, 0, 2], [0]] 等价 a[1, 0] 和 a[0, 0] 和 a[2, 0],相当于索…...
基于图像识别的自动驾驶汽车障碍物检测与避障算法研究
基于图像识别的自动驾驶汽车障碍物检测与避障算法研究是一个涉及计算机视觉、机器学习、人工智能和自动控制等多个领域的复杂问题。以下是对这个问题的研究内容和方向的一些概述。 障碍物检测 障碍物检测是自动驾驶汽车避障算法的核心部分,它需要从车辆的感知数据…...
Spring boot定时任务
目录 前言一、使用 Scheduled 注解二、使用 ScheduledExecutorService三、使用 Spring 的 TaskScheduler四、使用第三方调度框架 前言 在 Spring Boot 中,有多种方法来编写定时任务,以执行周期性或延迟执行的任务。下面是几种常见的方式 一、使用 Sche…...

Glide原理
本文基于Carson整理 1.简介 相比其他几种图片加载框架,Glide性能最好。这得益于其高效的图片缓存策略 其还有多样化的媒体格式加载:如GIF、Video,对于商城首页需展示丰富样式、信息的页面需求来说,也是必不可少的。 2.加载原理…...

wps表格按分隔符拆分单元格
有数据如下;看选中区域,一个单元格中有一个v,空格,然后有三个数值,以空格分开;点击菜单中的数据-分列; 弹出分列向导;选择 分隔符号; 选择分隔符为空格;出现预…...
【SEC 学习】Vim 的基本使用
一、Vim 编辑器安装 yum install -y vim二、Vim 三种模式 命令模式 编辑模式 末行模式 三、三种模式之间的转换 1. 命令模式 -> 编辑模式 快捷键含义i从光标处插入I从光标所在行首插入a从光标后插入A从光标所在行末插入o从光标下一行插入O从光标上一行插入 2. 命令模式 …...

Linux中shell脚本练习
目录 1.猜数字 2.批量创建用户 3.监控网卡Receive Transmit 数据的变化 4.部署Linux 5.系统性能检测脚本 6.分区脚本 7.数据库脚本 1.猜数字 随机数的生成 使用环境变量RANDOM,范围是0~32767 编写guest.sh,实现以下功能࿱…...

AS/400简介
AS400 AS400 简介AS/400操作系统演示 AS400 简介 在 AS400 中,AS代表“应用系统”。它是多用户、多任务和非常安全的系统,因此用于需要同时存储和处理敏感数据的行业。它最适合中级行业,因此用于制药行业、银行、商场、医院管理、制造业、分销…...

FreeRTOS 中断管理介绍和实操
目录 中断定义 中断优先级 相关注意 中断相关函数 1.队列 2.信号量 3.事件标志组 4.任务通知 5.软件定时器 中断管理实操 中断定义 中断是指在程序执行的过程中,突然发生了某种事件,需要立即停止当前正在执行的程序,并转而处理这个…...

性能测试 —— Jmeter 常用三种定时器!
1、同步定时器 位置:HTTP请求->定时器->Synchronizing Timer 当需要进行大量用户的并发测试时,为了让用户能真正的同时执行,添加同步定时器,用户阻塞线程,知道线程数达到预先配置的数值,才开始执行…...
ROS自学笔记十七:Arbotix
ArbotiX 是一个基于 ROS(Robot Operating System)的机器人控制系统,它旨在为小型机器人提供硬件控制和传感器接口,以便于机器人的运动和感知。以下是有关 ROS 中 ArbotiX 的简介和安装步骤: ArbotiX 简介 ArbotiX 主…...

Mac电脑窗口管理Magnet中文 for mac
Magnet是一款Mac窗口管理工具,它可以帮助用户轻松管理打开的窗口,提高多任务处理效率。以下是Magnet的一些主要特点和功能: 分屏模式支持:Magnet支持多种分屏模式,包括左/右/顶部/底部 1/2 分屏、左/中/右 1/3 分屏、…...
Centos7 部署 Stable Diffusion
参考:https://www.jianshu.com/p/ff81bb76158a 遇到的问题: 1、git clone 比较慢 解决办法:设置代理 https://blog.csdn.net/dszgf5717/article/details/130735389 2、pip install 比较慢 解决办法:更换源或设置代理 https:/…...

龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...

stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...