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

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.rhkb.cn/news/374287.html

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

相关文章

第十八章 Express multer 文件上传

本章将学习Express multer 文件上传 ,因为Nest 的文件上传是基于 Express 的中间件 multer 实现的,所以在学习 Nest 文件上传之前,我们先学习下 multer 包 首先先创建 multer-test 文件夹执行下面代码 创建package.json npm init -y接着安装…

单例模式的简单理解

单例模式 前言一、单例模式是什么二、单例模式的使用饿汉模式单线程下的懒汉模式多线程下的懒汉模式(优化懒汉模式)加锁 三、总结 前言 设计模式是将一些经典的问题场景进行整合归纳,并提供一些解决方案,相当于一种“套路”。 熟…

数据仓库介绍_维度表(三)

维度表概述 维度表是维度建模的基础和灵魂。前文提到,事实表紧紧围绕业务过程进行设计,而维度表则围绕业务过程所处的环境进行设计。维度表主要包含一个主键和各种维度字段,维度字段称为维度属性。 表设计步骤 确定维度(表&…

SQL 针对上面的salaries表emp_no字段创建索引idx_emp_no

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 针对salaries…

【开源合规】开源许可证风险场景详细解读

文章目录 前言关于BlackDuck许可证风险对比图弱互惠型许可证举个例子具体示例LGPL系列LGPL-2.0-onlyLGPL-2.0-or-laterLGPL-2.1-onlyLGPL-2.1-or-laterLGPL-3.0-onlyLGPL-3.0-or-laterMPL系列MPL-1.0MPL-1.1MPL-2.0EPL系列EPL-1.0EPL-2.0互惠型许可证GPL系列GPL-1.0GPL-2.0GPL-…

3.相机标定原理及代码实现(opencv)

1.相机标定原理 相机参数的确定过程就叫做相机标定。 1.1 四大坐标系及关系 (1)像素坐标系(单位:像素(pixel)) 像素坐标系是指相机拍到的图片的坐标系,以图片的左上角为坐标原点&a…

合合信息大模型加速器亮相WAIC大会:文档解析与文本识别新突破

合合信息大模型加速器亮相WAIC大会:文档解析与文本识别新突破 文章目录 合合信息大模型加速器亮相WAIC大会:文档解析与文本识别新突破前言合合信息TextIn平台:智能文档处理的领军者文档解析引擎:百页文档秒级处理大模型的发展背景…

【机器学习】独立成分分析(ICA):解锁信号的隐秘面纱

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 独立成分分析(ICA):解锁信号的隐秘面纱引言I…

若依 ruoyi-vue SpringBoot highlight-textarea 输入框敏感词关键词高亮标红(二)

参考文章,非常感谢大佬的分享 实现可高亮的输入框 — HighlightTextarea GitHub:highlight-textarea 可看作者上一篇文章 若依 ruoyi-vue SpringBoot聊天敏感词过滤sensitive-word(一) 效果图 审核时,输入框高亮敏感词&#xff…

vue3 + tsx 表格 Action 单独封装组件用法

前言 先上图看右侧列 action 的 UI 效果: 正常来说,如果一个表格的附带 action 操作,我们一般会放在最右侧的列里面实现,这个时候有些UI 框架支持在 SFC 模板里面定义额外的 solt,当然如果不支持,更通用的…

LabVIEW实现LED显示屏视觉检测

为了满足LED显示屏在生产过程中的严格质量检测需求,引入自动化检测系统是十分必要的。传统人工检测方式存在检测强度高、效率低、准确性差等问题,自动化检测系统则能显著提高检测效率和准确性。视觉检测系统的构建主要包含硬件和软件两个部分。 视觉系统…

新兴市场游戏产业爆发 传音以技术抢抓机遇 ​

随着年轻人口的增加以及互联网的普及,非洲、中东等新兴市场正迎来游戏产业的大爆发,吸引着全球游戏企业玩家在此开疆辟土。中国出海企业代表传音以新兴市场需求为中心,秉持本地化创新理念不断加强游戏等关键领域技术攻关凭借移动终端设备为全球玩家带来极致游戏体验,收获了消费…

谷粒商城实战笔记-26-分布式组件-SpringCloud-Gateway网关核心概念原理

微服务架构中,API网关扮演着至关重要的角色,它不仅作为微服务间的通信桥梁,还负责安全、监控、限流等职责。 一,网关的发展历程 SpringCloud的网关经历了两代的迭代和更替。 第一代网关是早期的Zuul,由 Netflix 开发…

kafka 消费者

消费者 消费者。消费者连接到Kafka上并接收消息,进而进行相应的业务逻辑处理。 消费组 消费者负责订阅Kafka中的主题,并且从订阅的主题上拉取消息。 消费组:每个消费者都有一个对应的消费组,每一个分区只能被一个消费组中的一个…

深入了解Rokid UXR2.0 SDK内置的Unity AR Glass开发组件

本文将了解到Rokid AR开发组件 一、RKCameraRig组件1.脚本属性说明2.如何使用 二、PointableUI组件1.脚本属性说明2.如何使用 三、PointableUICurve组件1.脚本属性说明2.如何使用 四、RKInput组件1.脚本属性说明2.如何使用 五、RKHand组件1.脚本属性说明2.如何使用3.如何禁用手…

昇思25天学习打卡营第17天|基于 MindSpore 实现 BERT 对话情绪识别

基于 MindSpore 实现 BERT 对话情绪识别 BERT介绍 BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer架构的预训练语言模型,由谷歌在2018年提出。从以下6个方面来介绍BERT: 1. 预训练和微调&…

Linux C语言基础 day8

目录 思维导图: 学习目标: 学习内容: 1. 字符数组 1.1 二维字符数组 1.1.1 格式 1.1.2 初始化 1.1.3 二维字符数组输入输出、求最值、排序 2. 函数 2.1 概念 关于函数的相关概念 2.2 函数的定义及调用 2.2.1 定义函数的格式 2.3…

GaussDB关键技术原理:高性能(五)

GaussDB关键技术原理:高性能(四)从USTORE存储引擎、计划缓存计划技术、数据分区与分区剪枝、列式存储和向量化引擎、SMP并行执行等五方面对高性能关键技术进行解读,本篇将从LLVM动态查询编译执行、SQL-BYPASS执行优化、线程池化、…

k8s核心操作_Ingress统一网关入口_域名访问配置_ingress域名转发规则配置_根据域名访问不同服务---分布式云原生部署架构搭建026

上一节我们已经把 ingress 安装好了可以看到 kubectl get svc -A 可以看到 出现了ingress-nginx 的service,在ingre-nginx这个命名空间中,有两个,一个是 ingress-nginx-controller 开了两个一个是对应http,一个对应https 一个是 ingress-nginx-controller-admission 对…

14.爬虫---Selenium 经典动态渲染工具的使用

14.Selenium 经典动态渲染工具的使用 1.查看chrome浏览器版本2.ChromeDriver 安装3.Selenium 安装4.验证安装5.基本用法5.1启动浏览器5.2导航到页面5.3查找元素5.3.1单个元素 find_element5.3.2多个元素 find_elements 5.4 执行操作5.5 动作链ActionChains5.6 执行 JavaScript …