go语言Gin框架的学习路线(六)

news2024/11/27 2:21:11

gin的路由器

Gin 是一个用 Go (Golang) 编写的 Web 框架,以其高性能和快速路由能力而闻名。在 Gin 中,路由器是框架的核心组件之一,负责处理 HTTP 请求并将其映射到相应的处理函数上。

以下是 Gin 路由器的一些关键特性和工作原理的简要解释:

  1. 路由注册:开发者可以在 Gin 中定义路由,这包括定义路径、HTTP 方法(GET、POST、PUT、DELETE 等)以及处理函数。路由注册是在应用启动时完成的。

  2. 路由匹配:当收到一个 HTTP 请求时,Gin 的路由器会根据请求的 URL 和 HTTP 方法来查找匹配的路由。

  3. 中间件支持:Gin 允许在路由上使用中间件,这些中间件可以在处理请求之前或之后执行一些操作,如日志记录、鉴权、跨域处理等。

  4. 路由分组:Gin 支持路由分组,这意味着你可以将一组相关的路由组织在一起,并为这组路由应用统一的中间件。

  5. 参数化路由:Gin 允许在路由中使用参数,这样可以通过 URL 传递动态值到处理函数。

  6. 路由模式:Gin 支持不同的路由模式,例如严格模式和非严格模式。在严格模式下,如果请求的 URL 与注册的路由不完全匹配,请求将不会被处理。

  7. 错误处理:Gin 提供了一种优雅的方式来处理路由中的错误,例如,如果找不到匹配的路由,Gin 会返回一个 404 错误。

  8. 路由性能:Gin 的路由性能非常高,因为它使用树状结构来匹配路由,这使得查找和匹配路由非常快速。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码解释

这段代码是一个使用 Gin 框架的 Go 语言 Web 应用的简单示例。下面是对代码中每个部分的解释:

  1. 导入包

    • "net/http" 是 Go 语言标准库的一部分,用于处理 HTTP 请求和响应。
    • "github.com/gin-gonic/gin" 是 Gin 框架的包,用于创建 Web 应用。
  2. main 函数

    • 这是程序的入口点,所有 Go 程序都从 main 函数开始执行。
  3. 创建路由实例

    • r := gin.Default() 创建了一个默认配置的 Gin 路由器实例。
  4. 定义路由

    • 使用 r.GETr.POSTr.PUT, 和 r.DELETE 方法定义了针对不同 HTTP 方法的路由。每个方法都关联到一个处理函数,该处理函数使用 gin.Context 来与请求和响应交互。
  5. 统一处理不同HTTP方法

    • r.Any("/other", ...) 定义了一个路由,它将匹配任何 HTTP 方法,并根据请求的方法返回不同的 JSON 响应。
  6. 无匹配路由的处理

    • r.NoRoute(...) 定义了当没有找到匹配的路由时的默认处理函数,它将返回一个 JSON 响应,其中包含 "method" 键和 "baidu.com" 作为值。
  7. 特定页面路由

    • 定义了 /shop/index 路由,当访问这个路径时,会返回包含 "msg" 键和 "/shop/index" 作为值的 JSON 响应。
  8. 路由组

    • 使用 r.Group 创建了一个路由组 videoGroup,这个组有一个公共的前缀 /video。在这个组内部,定义了三个 GET 路由,分别处理 /video/index/video/xx, 和 /video/oo 的请求。
  9. 启动服务器

    • r.Run(":8080") 启动了 Gin 服务器,监听 8080 端口,等待客户端的请求。
  10. 注释掉的代码

    • 有两段代码被注释掉了,分别是 /video/index 的 GET 路由和 /video 的路由组。注释掉的代码在程序中不会被执行。

这段代码展示了如何使用 Gin 框架来定义路由、处理不同的 HTTP 请求方法、创建路由组以及处理没有找到匹配路由的情况。通过这种方式,你可以构建一个具有不同页面和功能的 Web 应用。

gin中间键

在 Gin 框架中,中间件(Middleware)是一个非常重要的概念,它提供了一种在处理 HTTP 请求之前或之后执行代码的方式。中间件可以用于多种目的,比如日志记录、鉴权、跨域处理、请求限流等。

以下是对 Gin 中间件的一些关键点的解释:

  1. 定义中间件: 中间件通常是一个处理函数,它接收一个 *gin.Context 参数。*gin.Context 是 Gin 框架中的核心数据结构,它包含了请求和响应的数据,以及一些用于处理请求的方法。

  2. 使用中间件: 中间件可以在全局级别使用,也可以在特定路由或路由组上使用。使用 r.Use(middleware) 可以在所有路由上应用中间件;使用 r.GET("/path", middleware, handler) 可以在特定路由上应用中间件;使用 group.Use(middleware) 可以在路由组上应用中间件。

  3. 执行顺序: 中间件的执行顺序是按照它们被注册的顺序。如果一个请求匹配到一个路由,那么这个路由上注册的所有中间件将按顺序执行,然后是处理函数。

  4. 处理流程

    • 当一个请求到来时,Gin 首先执行注册在该请求路径上的所有中间件。
    • 如果中间件调用了 c.Next(),控制权会传递给下一个中间件或最终的处理函数。
    • 如果中间件没有调用 c.Next() 或者返回了一个错误,请求的处理流程将停止。
  5. 终止请求处理: 中间件可以通过调用 c.Abort() 来终止请求的处理流程。这通常用于鉴权失败或捕获到错误时。

  6. 错误处理: 中间件可以通过调用 c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "unauthorized"}) 来返回一个错误响应并终止请求处理。

  7. 访问请求和响应: 中间件可以访问和修改请求和响应的数据。例如,可以读取请求的头部信息、修改请求体、设置响应头等。

  8. 嵌套中间件: 中间件可以嵌套使用,一个中间件可以调用另一个中间件作为其处理逻辑的一部分。

  9. 自定义中间件: 开发者可以根据自己的需求编写自定义中间件,以实现特定的功能。

在这里插入图片描述
在这里插入图片描述

GORM

GORM 是一个流行的 Go 语言 ORM (对象关系映射) 库,它允许开发者使用 Go 语言的语法来操作数据库。以下是对 GORM 的一些关键点的解释:

  1. 对象关系映射

    • ORM 是一种编程技术,它将数据库中的数据表映射到程序中的对象。这意味着你可以使用对象的方式来操作数据库,而不需要编写大量的 SQL 语句。
  2. 数据库支持

    • GORM 支持多种数据库,包括 MySQL, PostgreSQL, SQLite, SQL Server 等。
  3. 模型定义

    • 在 GORM 中,你需要定义模型(Model),这通常是通过创建一个结构体来完成的。模型的结构定义了数据库表的列。
  4. 自动迁移

    • GORM 可以自动处理数据库迁移,这意味着它可以比较模型定义和数据库表结构的差异,并自动创建或修改表结构。
  5. 查询构建器

    • GORM 提供了一个强大的查询构建器,允许你以一种声明性的方式构建 SQL 查询,而不需要直接写 SQL 语句。
  6. 关联处理

    • GORM 支持多种类型的关联,如一对一、一对多和多对多。这些关联可以很容易地在模型中定义,并在查询时自动处理。
  7. 事务处理

    • GORM 支持事务处理,确保数据库操作的原子性。
  8. 钩子(Hooks)

    • GORM 允许你在特定的数据库操作前后添加自定义逻辑,如在创建记录前后执行某些操作。
  9. 链式操作

    • GORM 支持链式调用,使得代码更加简洁和易于阅读。
  10. 日志记录

    • GORM 可以记录所有执行的 SQL 语句,这对于调试和性能优化非常有用。
  11. 自定义方法

    • 可以在模型上定义自定义方法,这些方法可以封装复杂的数据库操作逻辑。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

 期末放假自学Gin框架,希望我们可以一起学习!

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

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

相关文章

【Unity2D 2022:Particle System】添加拾取粒子特效

一、创建粒子特效游戏物体 二、修改粒子系统属性 1. 基础属性 (1)修改发射粒子持续时间(Duration)为3s (2)取消勾选循环(Looping) (2)修改粒子存在时间&…

《梦醒蝶飞:释放Excel函数与公式的力量》9.4 NPV函数

9.4 NPV函数 NPV函数是Excel中用于计算净现值的函数。净现值(Net Present Value, NPV)是财务管理和投资决策中常用的指标,用于评估投资项目的价值。NPV表示的是未来一系列现金流的现值总和减去初始投资后的余额。 9.4.1 函数简介 NPV函数通…

【位运算】基础算法总结

目录 基础位运算给一个数n,确定它的二进制表示的第x位是0还是1将一个数n的二进制表示的第x位修改成1将一个数n的二进制表示的第x位修改成0位图思想(哈希表)提取一个数(n)二进制表示中的最右侧的1(lowbit&am…

【AI资讯】可以媲美GPT-SoVITS的低显存开源文本转语音模型Fish Speech

Fish Speech是一款由fishaudio开发的全新文本转语音工具,支持中英日三种语言,语音处理接近人类水平,使用Flash-Attn算法处理大规模数据,提供高效、准确、稳定的TTS体验。 Fish Audio

生产调度:flowshop问题数学建模

接上一篇文章,在了解生产调度问题的背景和基本概念之后,我想先从比较基础的 flowshop和 jobshop 数学模型入手,理解实际调度过程中的问题求解思路。这一篇文章主要面向 flowshop 问题进行数学建模,对于这类比较经典的问题&#xf…

通用的职位招聘小程序ui模板

蓝色简单的校园招聘,行业招聘,职位招聘手机小程序页面模板。包含:职位列表、职位详情、基本信息填写、登录、个人主页、消息页面等功能 通用的职位招聘小程序ui模板

Hadoop-YARN-Tutorial

Hadoop-YARN-Tutorial 1 What is YARN? Yarn is the acronym for yet another resource negotiator. Yarn是yet another resource negotiator的缩写。 Yarn is a resource manager created by separating the processing engine and the management function of mapreduce. …

Java 基础--File - IO流(2)

I/O流 定义 数据从硬盘流向内存为输入流,数据从内存流向硬盘为输出流。输入也叫读取数据,输出也叫写出数据。 IO分类 1.按照数据的流向分为:输入流和输出流 ①输入流:把数据从其他设备上读取到内存中的流 ②输出流&#xff1…

fork创建子进程详解

一.前言 在上一篇文章-进程的概念,最后我们提到了创建进程的方式有两种方式,一种是手动的创建出进程,还有一种就是我们今天要学习的使用代码的方式创建出子进程-fork。 而学习fork创建出进程的过程中,我们会遇到以下问题&#x…

[数据结构] 基于选择的排序 选择排序堆排序

标题:[数据结构] 基于选择的排序 选择排序&&堆排序 水墨不写bug (图片来源于网络) 目录 (一)选择排序 实现:(默认从小到大排序) 优化后实现方法: (二)堆排序…

【帧中继实验-ensp】

实验要求 在R1上开启一个点对点子接口,用于连接 R1–R2,两端IP地址为12.1.1.x 。开启一个多点子接口 ,用于连接R1–R3,R4,两段IP地址为134.1.1.x。 具体DLCI分配和映射关系如下: R1 102 R2 201—动态映射…

微软正在放弃React

最近,微软Edge团队撰写了一篇文章,介绍了微软团队如何努力提升Edge浏览器的性能。但在文中,微软对React提出了批评,并宣布他们将不再在Edge浏览器的开发中使用React。 我将详细解析他们的整篇文章内容,探讨这一决定对…

QML:Settings介绍

用途 提供持久的独立于平台的应用程序设置。 用户通常希望应用程序在会话中记住其设置(窗口大小、位置、选项等)。Settings能够以最小的工作量保存和恢复此类应用程序设置。 通过在Settings元素中声明属性来指定各个设置值。仅支持由QSettings识别的值…

Gemma2——Google 新开源大型语言模型完整应用指南

0.引言 Gemma 2以前代产品为基础,提供增强的性能和效率,以及一系列创新功能,使其在研究和实际应用中都具有特别的吸引力。Gemma 2 的与众不同之处在于,它能够提供与更大的专有模型相当的性能,但其软件包专为更广泛的可…

《梦醒蝶飞:释放Excel函数与公式的力量》9.3.1PV 函数

9.3.1 函数简介 PV函数用于计算一系列未来付款的现值,考虑了一定的利率。现值是未来金额的贴现值,表示在当前时刻相当于未来某一时间点的总价值。 9.3.2 语法 PV函数的语法如下: PV(rate, nper, pmt, [fv], [type]) rate:每期…

JavaEE初阶-网络原理1

文章目录 前言一、UDP报头二、UDP校验和2.1 CRC2.2 md5 前言 学习一个网络协议,最主要就是学习的报文格式,对于UDP来说,应用层数据到达UDP之后,会给应用层数据报前面加上UDP报头。 UDP数据报UDP包头载荷 一、UDP报头 如上图UDP的…

中英双语介绍美国苹果公司(Apple Inc.)

中文版 苹果公司简介 苹果公司(Apple Inc.)是一家美国跨国科技公司,总部位于加利福尼亚州库比蒂诺。作为全球最有影响力的科技公司之一,苹果以其创新的产品和设计引领了多个科技领域的变革。以下是对苹果公司发展历史、主要产品…

算法刷题笔记 滑动窗口(C++实现,非常详细)

文章目录 题目描述基本思路实现代码 题目描述 给定一个大小为n ≤ 10^6的数组。有一个大小为k的滑动窗口,它从数组的最左边移动到最右边。你只能在窗口中看到k个数字。每次滑动窗口向右移动一个位置。以下是一个例子: 该数组为 [1 3 -1 -3 5 3 6 7]&…

SAP PS学习笔记02 - 网络,活动,PS文本,PS文书(凭证),里程碑

上一章讲了PS 的概要,以及创建Project,创建WBS。 SAP PS学习笔记01 - PS概述,创建Project和WBS-CSDN博客 本章继续讲PS的后续内容。包括下面的概念和基本操作,以及一些Customize: - 网络(Network&#xf…

CC工具箱使用指南:【相交占比分析】

一、简介 需求场景如下,有【待分析地块】和【面积占比参考】2个图层。2个图层之间存在空间上的重叠。工具的目的是为了分析出【待分析地块】的每1个图斑中,和【面积占比参考】相交的面积,以及和总面积的占比。 举一个应用场景为例&#xff0…