Gin 详解

Gin

介绍

gin框架是一个基于go语言的轻量级web框架,它具有高效性、灵活性、易扩展性

路由

gin框架使用的是定制版的httprouter
其路由原理是大量使用公共前缀的树结构,注册路由的过程就是构造前缀树的过程。
具有公共前缀的节点也共享一个公共父节点。

在这里插入图片描述

  • 路由注册
// 在 Gin 中,路由通过 GET、POST、PUT、DELETE 等 HTTP 方法与 URL 路径的组合来定义。
// 这些方法直接作为 Gin 实例(通常命名为 r)的方法调用,接收一个字符串表示路径,一个或两个函数参数作为处理函数。
r := gin.Default()
// 注册 GET 路由
r.GET("/hello", func(c *gin.Context) {
    c.JSON(200, gin.H{"message": "Hello, world!"})
})
// 注册 POST 路由
r.POST("/login", loginHandler)
r.Run(":8080") // 启动服务器监听 8080 端口
  • 路由参数
// Gin 支持在路由路径中定义参数,这些参数可以通过 c.Param() 在处理函数中获取
// 动态路径参数:
r.GET("/users/:username", getUsers)
// 正则约束参数:
r.GET("/articles/:id([0-9]+)", getArticleByID)
  • 路由分组
// 通过创建 gin.RouterGroup 对象,可以为一组相关的路由设置共享的中间件、前缀等属性。
admin := r.Group("/admin")
admin.Use(AuthMiddleware) // 添加针对该分组的中间件
// 在分组内注册路由
admin.GET("/users", listAdminUsers)
admin.POST("/users", createAdminUser)
  • 路由重定向与别名
// Gin 允许设置路由重定向规则,将一个路径重定向到另一个路径:
r.GET("/old-path", func(c *gin.Context) {
    c.Redirect(http.StatusMovedPermanently, "/new-path")
})
  • 路由处理函数
处理函数接收一个 *gin.Context 参数,该对象包含了请求和响应的所有相关信息,通常完成以下任务:
- 读取请求数据:通过 c.Query()、c.PostForm()、c.ShouldBind() 等方法获取查询参数、表单数据或 JSON/XML 等请求体内容
- 响应数据:使用 c.JSON()、c.XML()、c.String()、c.File() 等方法向客户端发送响应
- 中间件:调用 c.Next() 传递控制权给下一个中间件或者结束请求
  • 嵌套路由与命名组
// Gin 支持嵌套的路由分组,可以创建层次化的路由结构:
v1 := r.Group("/api/v1", authMiddleware)
{
    users := v1.Group("/users")
    {
        users.GET("/:id", getUser)
        users.POST("/", createUser)
    }
    articles := v1.Group("/articles")
    {
        articles.GET("/:id", getArticle)
        articles.POST("/", createArticle)
    }
}
// 可以为分组命名,便于在中间件或其他地方引用:
auth := r.Group("/auth", AuthMiddleware)
{
    auth.GET("/login", loginHandler).Name("login")
    auth.POST("/logout", logoutHandler).Name("logout")
}
loginURL := r.MustGet("login").URL()  // 使用命名路由

中间件

中间件常用来实现一些通用的功能,如日志记录、权限校验、数据加工等

分为全局中间件和局部中间件两种类型:全局中间件作用于所有路由之前,局部中间件则是作用于某个路由或路由组之前。
  • 流程控制函数
1. c.Next(): 调用该函数会将控制权交给下一个中间件函数,如果没有下一个中间件函数,则将控制权交给处理请求的路由处理函数

2. c.Abort(): 调用该函数会立即终止当前中间件函数的执行,并且不会再调用后续的中间件函数或路由处理函数

3. c.AbortWithStatus(code int): 调用该函数会终止当前中间件函数的执行,并返回指定的HTTP状态码给客户端

4. c.NextWithError(): 调用该函数会将控制权交给下一个中间件函数,同时传递一个错误给下一个中间件函数或路由处理函数

5. c.IsAborted(): 该函数用于判断当前请求是否已经被终止,返回一个布尔值表示请求是否已经被终止

context

用于处理 HTTP 请求和响应,是通过中间件来传递的
在 Gin 的处理流程中,Context 贯穿整个处理过程,用于传递请求和响应的信息
  • 参数绑定、表单验证
Bind()系列函数:根据request的数据类型,将其解析到结构体或map
  • 参数传递
有成员Keys,上游需要传递的变量可以放在里面,下游处理时再从里面取出来,实现上下游参数传递,对应Set()Get()方法
  • 渲染不同格式的响应
// JSON响应、文本字符串响应、HTML 响应
c.JSON()
c.String()
c.HTML()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【第19章】Vue实战篇之主页面

文章目录 前言一、代码1. 主界面代码2. App.vue 二、展示总结 前言 登录完成之后&#xff0c;应该自动跳转到主页面&#xff0c;接下来我们搭建主界面。 一、代码 1. 主界面代码 <script setup> import {Management,Promotion,UserFilled,User,Crop,EditPen,SwitchBut…

Linux搭建Minio单机环境

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; Linux搭建Minio单机环境 ⏱️ 创作时间&#xff1a; 2024年06月19日 目…

群辉DSM7下ZeroTier的安装

目录 一、起因 二、具体操作 1、添加组件源: 2、安装套件 3、开启ssh 4、连接ssh执行修补 5、手工启动ZeroTier 6、使用终端命令加入网络 7、审核通过该节点的加入 三、测试链接 1、PC端测试 2、手机APP测试 ZeroTier 是一款异地组网工具,它可以将不同网络环境的设…

鸿蒙开发通信与连接:【@ohos.bluetooth (蓝牙)】

蓝牙 说明&#xff1a; 本模块首批接口从API version 7开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 蓝牙模块提供了基础的传统蓝牙能力以及BLE的扫描、广播等功能。 导入模块 import bluetooth from ohos.bluetooth;bluetooth.enableBluet…

PCB设计隐藏的陷进

1、BGA芯片的开窗和过油设计。 加工工艺中&#xff0c;范式过孔都需要盖油设计&#xff0c;实心焊盘需要开窗设计&#xff0c;坚决不能盖油。 2、通孔设计的互联连通性 比如H3芯片的wifi设计&#xff0c;实际上是没有联通的&#xff0c;虽然四层板的中间层有焊盘&#xff0c;但…

复旦大学:将推出至少100门AI领域课程

B站&#xff1a;啥都会一点的研究生公众号&#xff1a;啥都会一点的研究生 最近AI圈又发生了啥&#xff1f; 复旦大学&#xff1a;将在下一个学年推出至少100门AI领域课程 复旦大学召开2024年招生培养政策发布会&#xff0c;公布今年本科招生培养政策亮点。从今年秋季学期开…

【黑马TS】学习资料Day4

五、在 React 中使用 TypeScript 现在&#xff0c;我们已经掌握了 TS 中基础类型、高级类型的使用了。但是&#xff0c;如果要在前端项目开发中使用 TS&#xff0c;还需要掌握 React、Vue、Angular 等这些库或框架中提供的 API 的类型&#xff0c;以及在 TS 中是如何使用的。 …

ARCGIS 如何对河流等线条图形进行Smooth处理——具有多个断点高阶版

1.线转点折点&#xff08;注意&#xff01;很重要&#xff0c;不是线转点&#xff09; 2.点转线步骤 ## 3 线的融合 2.1 新建Filed 》短精度类型》利用选择工具的 线文件。全选同一条河流点&#xff0c;进入Tabel的选择界面。给同一条河赋值同一个值。 大功告成&#xff01;…

upload-labs第十三关教程

upload-labs第十三关教程 第十三关一、源代码分析代码审计 二、绕过分析1&#xff09;0x00绕过a.上传eval.pngb.使用burpsuite进行拦截修改之前&#xff1a;修改之后&#xff1a;进入hex模块&#xff1a; c.放包上传成功&#xff1a; d.使用中国蚁剑进行连接 2&#xff09;%00绕…

amov无人机连接;+数据传输;啊啊啊啊啊

socket传输数据: 局域网连接 连接---通信(命令行直接;)--- 传输数据(socket)--传输内容:launch文件; qgc连接; 1.局域网下的通信 1.1 局域网 厂家提供的方式是通过Homer图数传工具(硬件)构建的amov局域网实现通信连接. 好处是通信距离足够长,支持150m;坏处是"局部&qu…

SpringBoot配置第三方专业缓存技术Redis

Redis缓存技术 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的内存中数据结构存储系统&#xff0c;通常用作数据库、缓存和消息中间件。它支持多种数据结构&#xff0c;如字符串、哈希表、列表、集合、有序集合等&#xff0c;并提供了丰富的功能和灵活的…

用Selenium自动化Web应用测试!

在开发和维护Web应用时&#xff0c;测试是确保应用正常运行的关键环节。手动测试不仅费时费力&#xff0c;而且容易出错。而通过使用Selenium&#xff0c;程序员可以轻松模拟用户交互、验证页面元素&#xff0c;从而自动化测试过程&#xff0c;提升测试效率和准确性。 解决的问…

【TB作品】MSP430G2553,单片机,口袋板, 多路温度巡回检测仪的设计

题7 多路温度巡回检测仪的设计 设计一个多路温度检测仪&#xff0c;共有8个测温点&#xff0c;每个点连续检测8次&#xff0c;以平均值代表该点温度&#xff0c;并轮流在LED显示器上显示。测试检测元件为铂热电阻Pt1000, 温度测量范围为100℃ ——500℃&#xff0c;测量精度为1…

用LoRA微调 Llama 2:定制大型语言模型进行问答

Fine-tune Llama 2 with LoRA: Customizing a large language model for question-answering — ROCm Blogs (amd.com) 在这篇博客中&#xff0c;我们将展示如何在AMD GPU上使用ROCm对Llama 2进行微调。我们采用了低秩适配大型语言模型(LoRA)来克服内存和计算限制&#xff0c;…

Chatgpt教我打游戏攻略

宝可梦朱 我在玩宝可梦朱的时候&#xff0c;我的同行队伍里有黏美儿&#xff0c;等级为65&#xff0c;遇到了下雨天但是没有进化&#xff0c;为什么呢&#xff1f; 黏美儿&#xff08;Goomy&#xff09;要进化为黏美龙&#xff08;Goodra&#xff09;&#xff0c;需要满足以下…

金蝶BI方案与奥威BI:智能、高效的数据分析组合

在当今数据驱动的时代&#xff0c;企业对于快速、准确、全面的数据分析需求日益增长。金蝶BI方案和奥威BI SaaS平台正是为满足这一需求而精心打造的智能数据分析工具。 方案见效快 金蝶BI方案以其高效的数据处理能力&#xff0c;能够快速地将海量数据转化为有价值的信息。通过…

港股全面大反攻即将开始!

港股三大指数高开高走&#xff0c;截至发稿&#xff0c;恒指涨2.87%。消费电子普遍开始盘整&#xff0c;但科网股迎来全面反弹&#xff0c;恒指在18000附近连续整固之后&#xff0c;今日似乎迎来了反转契机。 招银国际表示&#xff0c;回顾年初至今的中国互联网板块表现及行业…

【最新鸿蒙应用开发】——关于鸿蒙MVVM模式的理解

MVVM模式 MVVM&#xff08;Model-View-ViewModel&#xff09;是一种软件设计模式&#xff0c;主要用于分离应用程序的用户界面&#xff08;UI&#xff09;和业务逻辑。这种模式可以帮助开发者更高效地开发和管理复杂的用户界面。 程序的状态数据通常包含了数组、对象&#xff0…

数据资产:打破数据孤岛,实现数据互联互通,构建企业智能化转型的重要桥梁。通过高效整合与利用数据资源,推动企业决策的科学化、精准化,助力企业迈向智能化新时代

目录 一、引言 二、数据孤岛现象及其影响 三、打破数据孤岛&#xff0c;实现数据互联互通 1、制定统一的数据标准和管理规范 2、建设统一的数据平台 3、推广数据共享和开放文化 四、数据资产在智能化转型中的重要作用 1、推动企业决策的科学化、精准化 2、优化企业运营…

LoginGUI.java

LoginGUI.java 完成效果如下图&#xff1a; CODE Summary: This code sets up a login GUI using Swing. It defines a LoginGUI class extending JFrame. The constructor initializes the GUI components and sets up event listeners. The event_login method handles…