go语言Gin框架的学习路线(六)
gin的路由器
Gin 是一个用 Go (Golang) 编写的 Web 框架,以其高性能和快速路由能力而闻名。在 Gin 中,路由器是框架的核心组件之一,负责处理 HTTP 请求并将其映射到相应的处理函数上。
以下是 Gin 路由器的一些关键特性和工作原理的简要解释:
-
路由注册:开发者可以在 Gin 中定义路由,这包括定义路径、HTTP 方法(GET、POST、PUT、DELETE 等)以及处理函数。路由注册是在应用启动时完成的。
-
路由匹配:当收到一个 HTTP 请求时,Gin 的路由器会根据请求的 URL 和 HTTP 方法来查找匹配的路由。
-
中间件支持:Gin 允许在路由上使用中间件,这些中间件可以在处理请求之前或之后执行一些操作,如日志记录、鉴权、跨域处理等。
-
路由分组:Gin 支持路由分组,这意味着你可以将一组相关的路由组织在一起,并为这组路由应用统一的中间件。
-
参数化路由:Gin 允许在路由中使用参数,这样可以通过 URL 传递动态值到处理函数。
-
路由模式:Gin 支持不同的路由模式,例如严格模式和非严格模式。在严格模式下,如果请求的 URL 与注册的路由不完全匹配,请求将不会被处理。
-
错误处理:Gin 提供了一种优雅的方式来处理路由中的错误,例如,如果找不到匹配的路由,Gin 会返回一个 404 错误。
-
路由性能:Gin 的路由性能非常高,因为它使用树状结构来匹配路由,这使得查找和匹配路由非常快速。
代码解释
这段代码是一个使用 Gin 框架的 Go 语言 Web 应用的简单示例。下面是对代码中每个部分的解释:
-
导入包:
"net/http"
是 Go 语言标准库的一部分,用于处理 HTTP 请求和响应。"github.com/gin-gonic/gin"
是 Gin 框架的包,用于创建 Web 应用。
-
main 函数:
- 这是程序的入口点,所有 Go 程序都从
main
函数开始执行。
- 这是程序的入口点,所有 Go 程序都从
-
创建路由实例:
r := gin.Default()
创建了一个默认配置的 Gin 路由器实例。
-
定义路由:
- 使用
r.GET
,r.POST
,r.PUT
, 和r.DELETE
方法定义了针对不同 HTTP 方法的路由。每个方法都关联到一个处理函数,该处理函数使用gin.Context
来与请求和响应交互。
- 使用
-
统一处理不同HTTP方法:
r.Any("/other", ...)
定义了一个路由,它将匹配任何 HTTP 方法,并根据请求的方法返回不同的 JSON 响应。
-
无匹配路由的处理:
r.NoRoute(...)
定义了当没有找到匹配的路由时的默认处理函数,它将返回一个 JSON 响应,其中包含 "method" 键和 "baidu.com" 作为值。
-
特定页面路由:
- 定义了
/shop/index
路由,当访问这个路径时,会返回包含 "msg" 键和 "/shop/index" 作为值的 JSON 响应。
- 定义了
-
路由组:
- 使用
r.Group
创建了一个路由组videoGroup
,这个组有一个公共的前缀/video
。在这个组内部,定义了三个 GET 路由,分别处理/video/index
,/video/xx
, 和/video/oo
的请求。
- 使用
-
启动服务器:
r.Run(":8080")
启动了 Gin 服务器,监听 8080 端口,等待客户端的请求。
-
注释掉的代码:
- 有两段代码被注释掉了,分别是
/video/index
的 GET 路由和/video
的路由组。注释掉的代码在程序中不会被执行。
- 有两段代码被注释掉了,分别是
这段代码展示了如何使用 Gin 框架来定义路由、处理不同的 HTTP 请求方法、创建路由组以及处理没有找到匹配路由的情况。通过这种方式,你可以构建一个具有不同页面和功能的 Web 应用。
gin中间键
在 Gin 框架中,中间件(Middleware)是一个非常重要的概念,它提供了一种在处理 HTTP 请求之前或之后执行代码的方式。中间件可以用于多种目的,比如日志记录、鉴权、跨域处理、请求限流等。
以下是对 Gin 中间件的一些关键点的解释:
-
定义中间件: 中间件通常是一个处理函数,它接收一个
*gin.Context
参数。*gin.Context
是 Gin 框架中的核心数据结构,它包含了请求和响应的数据,以及一些用于处理请求的方法。 -
使用中间件: 中间件可以在全局级别使用,也可以在特定路由或路由组上使用。使用
r.Use(middleware)
可以在所有路由上应用中间件;使用r.GET("/path", middleware, handler)
可以在特定路由上应用中间件;使用group.Use(middleware)
可以在路由组上应用中间件。 -
执行顺序: 中间件的执行顺序是按照它们被注册的顺序。如果一个请求匹配到一个路由,那么这个路由上注册的所有中间件将按顺序执行,然后是处理函数。
-
处理流程:
- 当一个请求到来时,Gin 首先执行注册在该请求路径上的所有中间件。
- 如果中间件调用了
c.Next()
,控制权会传递给下一个中间件或最终的处理函数。 - 如果中间件没有调用
c.Next()
或者返回了一个错误,请求的处理流程将停止。
-
终止请求处理: 中间件可以通过调用
c.Abort()
来终止请求的处理流程。这通常用于鉴权失败或捕获到错误时。 -
错误处理: 中间件可以通过调用
c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "unauthorized"})
来返回一个错误响应并终止请求处理。 -
访问请求和响应: 中间件可以访问和修改请求和响应的数据。例如,可以读取请求的头部信息、修改请求体、设置响应头等。
-
嵌套中间件: 中间件可以嵌套使用,一个中间件可以调用另一个中间件作为其处理逻辑的一部分。
-
自定义中间件: 开发者可以根据自己的需求编写自定义中间件,以实现特定的功能。
GORM
GORM 是一个流行的 Go 语言 ORM (对象关系映射) 库,它允许开发者使用 Go 语言的语法来操作数据库。以下是对 GORM 的一些关键点的解释:
-
对象关系映射:
- ORM 是一种编程技术,它将数据库中的数据表映射到程序中的对象。这意味着你可以使用对象的方式来操作数据库,而不需要编写大量的 SQL 语句。
-
数据库支持:
- GORM 支持多种数据库,包括 MySQL, PostgreSQL, SQLite, SQL Server 等。
-
模型定义:
- 在 GORM 中,你需要定义模型(Model),这通常是通过创建一个结构体来完成的。模型的结构定义了数据库表的列。
-
自动迁移:
- GORM 可以自动处理数据库迁移,这意味着它可以比较模型定义和数据库表结构的差异,并自动创建或修改表结构。
-
查询构建器:
- GORM 提供了一个强大的查询构建器,允许你以一种声明性的方式构建 SQL 查询,而不需要直接写 SQL 语句。
-
关联处理:
- GORM 支持多种类型的关联,如一对一、一对多和多对多。这些关联可以很容易地在模型中定义,并在查询时自动处理。
-
事务处理:
- GORM 支持事务处理,确保数据库操作的原子性。
-
钩子(Hooks):
- GORM 允许你在特定的数据库操作前后添加自定义逻辑,如在创建记录前后执行某些操作。
-
链式操作:
- GORM 支持链式调用,使得代码更加简洁和易于阅读。
-
日志记录:
- GORM 可以记录所有执行的 SQL 语句,这对于调试和性能优化非常有用。
-
自定义方法:
- 可以在模型上定义自定义方法,这些方法可以封装复杂的数据库操作逻辑。
期末放假自学Gin框架,希望我们可以一起学习!
相关文章:
go语言Gin框架的学习路线(六)
gin的路由器 Gin 是一个用 Go (Golang) 编写的 Web 框架,以其高性能和快速路由能力而闻名。在 Gin 中,路由器是框架的核心组件之一,负责处理 HTTP 请求并将其映射到相应的处理函数上。 以下是 Gin 路由器的一些关键特性和工作原理的简要解释…...
Java面经知识点汇总版
Java面经知识点汇总版 算法 14. 最长公共前缀(写出来即可) Java 计算机基础 数据库 基础 SQL SELECT first_name, last_name, salary FROM employees WHERE department Sales AND salary > (SELECT AVG(salary)FROM employeesWHERE department Sal…...
详细分析Sql Server中的declare基本知识
目录 前言1. 基本知识2. Demo3. 拓展Mysql4. 彩蛋 前言 实战探讨主要来源于触发器的Demo 1. 基本知识 DECLARE 语句用于声明变量 声明的变量可以用于存储临时数据,并在 SQL 查询中多次引用 声明变量:使用 DECLARE 语句声明一个或多个变量变量命名&a…...
Perl 语言入门:编写并执行你的第一个脚本
摘要 Perl 是一种高级、通用的、解释型、动态编程语言,以其强大的文本处理能力而闻名。本文将指导初学者如何编写和执行他们的第一个 Perl 脚本,包括 Perl 的基本概念、脚本的基本结构、运行 Perl 脚本的方法以及一些简单的 Perl 语法。 引言 Perl&am…...
python库 - missingno
missingno 是一个用于可视化和分析数据集中缺失值的 Python 库。它提供了一系列简单而强大的工具,帮助用户直观地理解数据中的缺失模式,从而更好地进行数据清洗和预处理。missingno 库特别适用于数据分析和数据科学项目,尤其是在处理缺失数据…...
VPN的限制使得WinSCP无法直接连接到FTP服务器解决办法
由于VPN的限制使得WinSCP无法直接连接到FTP服务器,并且堡垒机的文件上传限制为500M,因此我们需要找到一种绕过这些限制的方法。以下是几个可行的方案: 方法1:通过分割文件上传 分割文件: 使用文件分割工具(…...
PCI DSS是什么?
PCI DSS,全称为Payment Card Industry Data Security Standard(支付卡行业数据安全标准),是由支付卡行业安全标准委员会(PCI Security Standards Council)制定的一套安全标准,旨在保护信用卡信息…...
DeepMind的JEST技术:AI训练速度提升13倍,能效增强10倍,引领绿色AI革命
谷歌旗下的人工智能研究实验室DeepMind发布了一项关于人工智能模型训练的新研究成果,声称其新提出的“联合示例选择”(Joint Example Selection,简称JEST)技术能够极大地提高训练速度和能源效率,相比其他方法ÿ…...
如何使用 pytorch 创建一个神经网络
我已发布在:如何使用 pytorch 创建一个神经网络 SapientialM.Github.io 构建神经网络 1 导入所需包 import os import torch from torch import nn from torch.utils.data import DataLoader from torchvision import datasets, transforms2 检查GPU是否可用 dev…...
Java版Flink使用指南——定制RabbitMQ数据源的序列化器
大纲 新建工程新增依赖数据对象序列化器接入数据源 测试修改Slot个数打包、提交、运行 工程代码 在《Java版Flink使用指南——从RabbitMQ中队列中接入消息流》一文中,我们从RabbitMQ队列中读取了字符串型数据。如果我们希望读取的数据被自动化转换为一个对象&#x…...
CV每日论文--2024.7.8
1、DisCo-Diff: Enhancing Continuous Diffusion Models with Discrete Latents 中文标题:DisCo-Diff:利用离散潜伏增强连续扩散模型 简介:这篇文章提出了一种新型的离散-连续潜变量扩散模型(DisCo-Diff),旨在改善传统扩散模型(DMs)存在的问…...
【AI大模型】赋能儿童安全:楼层与室内定位实践与未来发展
文章目录 引言第一章:AI与室内定位技术1.1 AI技术概述1.2 室内定位技术概述1.3 楼层定位的挑战与解决方案 第二章:儿童定位与安全监控的需求2.1 儿童安全问题的现状2.2 智能穿戴设备的兴起 第三章:技术实现细节3.1 硬件设计与选择传感器选择与…...
云服务器linux系统安装配置docker
在我们拿到一个纯净的linux系统时,我需要进行一些基础环境的配置 (如果是云服务器可以用XShell远程连接,如果连接不上可能是服务器没开放22端口) 下面是配置环境的步骤 sudo -s进入root权限:退出使用exit sudo -i进入…...
泰勒雷达图2
matplotlib绘制泰勒雷达图 import matplotlib.pyplot as plt import numpy as np from numpy.core.fromnumeric import shape import pandas as pd import dask.dataframe as dd from matplotlib.projections import PolarAxes import mpl_toolkits.axisartist.floating_axes a…...
数据库容灾 | MySQL MGR与阿里云PolarDB-X Paxos的深度对比
开源生态 众所周知,MySQL主备库(两节点)一般通过异步复制、半同步复制(Semi-Sync)来实现数据高可用,但主备架构在机房网络故障、主机hang住等异常场景下,HA切换后大概率就会出现数据不一致的问…...
react根据后端返回数据动态添加路由
以下代码都为部分核心代码 一.根据不同的登录用户,返回不同的权限列表 ,以下是三种不同用户限权列表 const pression { //超级管理员BigAdmin: [{key: "screen",icon: "FileOutlined",label: "数据图表",},{key: "…...
机器学习中的可解释性
「AI秘籍」系列课程: 人工智能应用数学基础 人工智能Python基础 人工智能基础核心知识 人工智能BI核心知识 人工智能CV核心知识 为什么我们需要了解模型如何进行预测 我们是否应该始终信任表现良好的模型?模型可能会拒绝你的抵押贷款申请或诊断你患…...
上海慕尼黑电子展开展,启明智显携物联网前沿方案亮相
随着科技创新的浪潮不断涌来,上海慕尼黑电子展在万众瞩目中盛大开幕。本次展会汇聚了全球顶尖的电子产品与技术解决方案,成为业界瞩目的焦点。启明智显作为物联网彩屏显示领域的佼佼者携产品亮相展会,为参展者带来了RTOS、LINUX全系列方案及A…...
Centos7离线安装ElasticSearch7.4.2
一、官网下载相关的安装包 ElasticSearch7.4.2: elasticsearch-7.4.2-linux-x86_64.tar.gz 下载中文分词器: elasticsearch-analysis-ik-7.4.2.zip 二、上传解压文件到服务器 上传到目录:/home/data/elasticsearch 解压文件࿱…...
深入理解sklearn中的模型参数优化技术
参数优化是机器学习中的关键步骤,它直接影响模型的性能和泛化能力。在sklearn中,参数优化可以通过多种方式实现,包括网格搜索(GridSearchCV)、随机搜索(RandomizedSearchCV)和贝叶斯优化等。本文…...
【Elasticsearch】开源搜索技术的演进与选择:Elasticsearch 与 OpenSearch
开源搜索技术的演进与选择:Elasticsearch 与 OpenSearch 1.历史发展2.OpenSearch 与 Elasticsearch 相同点3.OpenSearch 与 Elasticsearch 不同点3.1 版本大不同3.2 许可证不同3.3 社区不同3.4 功能不同3.5 安全性不同3.6 性能不同3.7 价格不同3.8 两者可相互导入 4…...
欧拉openEuler 22.03 LTS-部署k8sv1.03.1
1.设置ip # vi /etc/sysconfig/network-scripts/ifcfg-ens32 TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic DEFROUTEyes IPV4_FAILURE_FATALno #IPV6INITyes #IPV6_AUTOCONFyes #IPV6_DEFROUTEyes #IPV6_FAILURE_FATALno #IPV6_ADDR_GEN_MODEeui64 NAMEens1…...
老年生活照护实训室:为养老服务业输送专业人才
本文探讨了老年生活照护实训室在养老服务业专业人才培养中的关键作用。通过详细阐述实训室的功能、教学实践、对学生能力的培养以及面临的挑战和解决方案,强调了其在提升人才素质、满足行业需求方面的重要性,旨在为养老服务业的可持续发展提供有力的人才…...
go语言中使用WaitGroup和channel实现处理多线程问题
WaitGroup 背景 如果将一个任务分为任意个小任务,并且不关心小任务的执行顺序,并且希望等待全部的小任务执行完成后再去操作后面的逻辑,那我推荐你用sync.WaitGRoup 使用方法 比如,有一个任务需要执行 3 个子任务,…...
Open3D 计算点云的平均密度
目录 一、概述 1.1基于领域密度计算原理 1.2应用 二、代码实现 三、实现效果 2.1点云显示 2.2密度计算结果 一、概述 在点云处理中,点的密度通常表示为某个点周围一定区域内的点的数量。高密度区域表示点云较密集,低密度区域表示点云较稀疏。计算…...
C语言之数据在内存中的存储(1),整形与大小端字节序
目录 前言 一、整形数据在内存中的存储 二、大小端字节序 三、大小端字节序的判断 四、字符型数据在内存中的存储 总结 前言 本文主要讲述整型包括字符型是如何在内存中存储的,涉及到大小端字节序这一概念,还有如何判断大小端,希望对大…...
B端全局导航:左侧还是顶部?不是随随便便,有依据在。
一、什么是全局导航 B端系统的全局导航是指在B端系统中的主要导航菜单,它通常位于系统的顶部或左侧,提供了系统中各个模块和功能的入口。全局导航菜单可以帮助用户快速找到和访问系统中的各个功能模块,提高系统的可用性和用户体验。 全局导航…...
什么是海外仓管理自动化?策略及落地实施步骤指南
作为海外仓的管理者,你每天都面临提高海外仓运营效率、降低成本和满足客户需求的问题。海外仓自动化管理技术为这些问题提供了不错的解决思路,不过和任何新技术一样,从策略到落地实施,都有一个对基础逻辑的认识过程。 今天我们整…...
自定义控件三部曲之绘图篇(六)Paint之函数大汇总、ColorMatrix与滤镜效果、setColorFilter
在自定义控件的绘图篇中,Paint 类是核心的组成部分之一,它控制了在 Canvas 上绘制的内容的各种属性,包括颜色、风格、抗锯齿、透明度等等。下面将详细介绍 Paint 的主要功能以及如何使用 ColorMatrix 和 setColorFilter 来实现滤镜效果。 Pa…...
请写sql满足业务:找到连续登录3天以上的用户
为了找到连续登录超过 3 天的用户,我们可以使用 SQL 窗口函数和递归查询来实现。假设有一个 user_logins 表,包含以下字段: user_id(用户ID)login_date(登录日期) 假设 login_date 是 DATE 类…...
西安政府做网站/台州百度关键词排名
第一期 移动开发从组件化到Web化 坐标:上海简介:随着移动互联网业务的不断增长和移动客户端技术发展不断深入,模块化、组件化及动态化的架构设计在帮助开发者降低模块耦合、提升团队合作效率和灵活应对业务变化上有越来越深入的应用。与此同…...
电子产品配件采购网站/视频号下载器手机版
Java并发编程:阻塞队列 在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方…...
建设工程鲁班奖公示网站/千锋教育培训收费一览表
文章目录问题描述解题报告实现代码参考资料问题描述 给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] nums [j],并且 i 和 j 的差的 绝对值 至多为 k。 示例 1: 输入: nums [1,2,3,1], k 3 输出:…...
网站开发的开题报告模板/北京刚刚宣布比疫情更可怕的事情
决策树算法是非常常用的分类算法,其分类的思路非常清晰,简单易懂。并且它也是一个很基础的算法,集成学习和随机森林算法是以其为基础的。 算法简介 对于决策树算法,其输入是带有标签的数据,输出是一颗决策树。其非叶…...
网站备案每年审吗/考研培训班集训营
需求如图,总结如下 1.根据后台返回的数据,判断有备忘录的给出标注,memoLevel为紧急程度 1为紧急(红色),2一般(蓝色),3不重要(绿色),显…...
php 手机网站 模板/it培训班学出来有用吗
现在由于家里的网太慢,还没查出来原因。回头去公司要好好看看。最近这服务器很不和谐,看来是真的老了。终端过去连接速度超慢。...