Gin趣讲

news2025/4/18 23:41:35

故事背景:Gin快递公司

假设你开了一家名叫“Gin快递”的公司,专门帮客户寄包裹。客户会通过电话(也就是HTTP请求)告诉你他们要寄什么东西,你的公司得快速接单、分任务、处理包裹,最后把结果送回去。Gin框架就是这个快递公司的“智能管理系统”,它让一切变得井井有条,效率超高!接下来,我会带你认识公司里的五个“明星员工”,看看他们是怎么一起把快递送到客户手上的。

五大明星员工:Gin的“核心团队”

Gin快递公司(Http服务器)有五个厉害的员工,每个员工都有自己的“能力”。我们一个一个来认识他们,用生活化的例子把他们的工作讲得清清楚楚。

1. HTTP服务器端口:热情的接线小姐姐

形象:想象一个坐在前台、笑容满面的小姐姐,手边放着一部大电话。她在公司的大门(服务器开放的端口),客户的所有电话都会打到她这里。

工作:她的任务是接听客户的电话(HTTP请求),听清楚客户说的话(比如“寄个包裹到/ping”),然后把这些信息记录在一张“任务单”上,通过传送带交给后面的同事。她从早到晚守在电话旁,耳朵特别灵,绝不会漏接一个电话。

代码示例

r := gin.Default() // 雇了个接线小姐姐,启动Gin引擎
r.Run(":8080")    // 告诉她:“守在8080号电话亭等着客户吧!”

2. 路由:超级聪明的分拣员

形象:一个戴着眼镜、手脚麻利的小哥哥,面前摆着一大堆信箱。他是公司的“导航仪”,专门负责把任务单通过传送带分给正确的快递员。

工作:小姐姐把任务单通过传送带递过来后,分拣员会看一眼地址(比如/ping),然后飞快地翻他的“地址簿”,将任务单放置到正确的传送带,使其送到对应的快递员。

代码示例

r.GET("/ping", func(c *gin.Context) {
    c.JSON(200, gin.H{"message": "pong"})
})

3. 中间件:细心的检查员

形象:一个拿着放大镜、表情严肃的大叔,站在传送带旁边。他是公司的“质量监督员”,确保每个包裹的任务单在传送带上都万无一失。

代码示例

func Logger() gin.HandlerFunc {
    return func(c *gin.Context) {
        t := time.Now() // 记录开始时间
        c.Next()        // 让快递员去干活
        latency := time.Since(t) // 计算花费时间
        log.Print(latency)       // 记录日志
    }
}
r.Use(Logger()) // 添加检查员

4. 上下文(Context):万能的任务清单

形象:一张会说话的魔法纸,上面写满了任务的细节。它是每个包裹的“灵魂”,跟着任务跑来跑去。

代码示例

func handler(c *gin.Context) {
    name := c.Query("name") // 读取客户的名字
    c.JSON(200, gin.H{"hello": name}) // 返回JSON响应
}

5. 渲染:麻利的打包员

形象:一个手脚飞快的小姐姐,手边堆满了包装盒和胶带。她是公司的“收尾专家”,负责把快递员的结果打包好寄出去。

代码示例

c.JSON(200, gin.H{"message": "pong"})

一个包裹的完整冒险之旅

假设客户打了个电话说:“我要去/ping寄个包裹!”

  1. 接电话(端口):接线小姐姐接听请求,写下任务单,将任务单通过传送带递给分拣员。
  2. 分拣(路由):分拣员查看地址,找到对应快递员的传送带,将任务单送过去。
  3. 检查(中间件):检查员会一直在传送带旁审核任务单,确保无误。
  4. 处理(处理请求):快递员处理请求,生成结果。
  5. 打包(打包请求):打包员整理结果,准备发出。
  6. 送达(回应请求):最终将结果返回给客户。

为什么Gin快递公司这么牛?

  1. 分拣员超聪明:基数树让路由查找更快。
  2. 不浪费资源:上下文对象池减少内存开销。
  3. 检查员高效:中间件灵活易扩展。
  4. 打包员专业:数据压缩优化响应速度。

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

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

相关文章

Redis——五种数据类型

目录 前言 1.String 1.1RAW编码 1.2EMBSTR编码 1.3 INT编码 2.List 3.Set 3.1 InSet编码转化成Dict编码 4.ZSet 4.1结合SkipList和HT实现 4.2使用ZipList实现 4.3编码转换 4.4 ZipList排序功能 5.Hash 5.1Hash底层存储结构 6.Redis数据结构和数据类型关系图 前言…

Godot学习-创建简单动画

文章目录 1、准备工作Godot资源 2、创建项目3、创建结点4、创建动画1、创建动画2、添加轨道3、创建关键帧3.1 第一个关键帧3.2 第二个关键帧 5、加载后自动播放6、动画循环7、轨道设置1、轨道更新模式2、轨迹插值3、其他属性的关键帧4、编辑关键帧5、使用 RESET 轨道6、洋葱皮 …

论文阅读VACE: All-in-One Video Creation and Editing

code:https://github.com/ali-vilab/VACE 核心 单个模型同时处理多种视频生成和视频编辑任务通过VCU(视频条件单元)进行实现 方法 视频任务 所有的视频相关任务可以分为4类 文本生视频 参考图片生视频 视频生视频 视频mask生视频 VCU …

JavaSE学习(前端初体验)

文章目录 前言一、准备环境二、创建站点(创建一个文件夹)三、将站点部署到编写器中四、VScode实用小设置五、案例展示 前言 首先了解前端三件套:HTML、CSS、JS HTML:超文本标记语言、框架层、描述数据的; CSS&#xf…

前端渲染pdf文件解决方案

一、前言 在当今数字化信息传播的时代,PDF文档作为一种常见的文件格式扮演着重要的角色。对于前端开发者而言,实现在网页上渲染和展示PDF文件是一项常见但也具有挑战性的任务。幸运的是,现在有一个强大的工具——react-pdf-viewer&#xff0c…

Kubernetes(K8S)内部功能总结

Kubernetes(K8S)是云技术的最核心的部分,也是构建是云原生的基石 K8S K8S,是Kubernetes的缩写,是Google开发的容器编排平台,现在由云原生计算基金会(CNCF)进行维护。 K8S&#xff…

【计算机网络】3数据链路层①

这篇笔记专门讲数据链路层的功能。 2.功能 数据链路层的主要任务是让帧在一段链路上或一个网络中传输。 2.1.封装成帧(组帧) 解决的问题:①帧定界②帧同步③透明传输 实现组帧的方法通常有以下种。 2.1.1.字符计数法 原理:在每个帧开头,用一个定长计数字段来记录该…

Nginx底层架构(非常清晰)

目录 前言: 场景带入: HTTP服务器是什么? 反向代理是什么? 模块化网关能力: 1.配置能力: 2.单线程: 3.多worker进程 4.共享内存: 5.proxy cache 6.master进程 最后&…

Docker 设置镜像源后仍无法拉取镜像问题排查

#记录工作 Windows系统 在使用 Docker 的过程中,许多用户会碰到设置了国内镜像源后,依旧无法拉取镜像的情况。接下来,记录了操作要点以及问题排查方法,帮助我们顺利解决这类问题。 Microsoft Windows [Version 10.0.27823.1000…

Edge 浏览器推出 Copilot Vision:免费实时解析屏幕内容;Aqua Voice:极速 AI 语音输入工具丨日报

开发者朋友们大家好 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 技术 」、「有亮点的 产品 」、「有思考的 文章 」、「有态度的 观点 」、「有看…

async-profiler火焰图找出耗CPU方法

事情起于开发应用对依赖的三方包(apache等等)进行了升级后(主要是升级spring),CPU的使用率较原来大幅提升,几个应用提升50%-100%。 查找半天,对比每次版本的cpu火焰图,看不出有什么…

@Autowird 注解与存在多个相同类型对象的解方案

现有一个 Student 类,里面有两个属性,分别为 name 和 id;有一个 StuService 类,里面有两个方法,返回值均为类型为 Student 的对象;还有一个 StuController 类,里面有一个 Student 类型的属性&am…

WordPiece 详解与示例

WordPiece详解 1. 定义与背景 WordPiece 是一种子词分词算法,由谷歌于2012年提出,最初用于语音搜索系统,后广泛应用于机器翻译和BERT等预训练模型。其核心思想是将单词拆分为更小的子词单元(如词根、前缀/后缀),从而解决传统分词方法面临的词汇表过大和未知词(OOV)处…

PVE+CEPH+HA部署搭建测试

一、基本概念介绍 Proxmox VE ‌Proxmox Virtual Environment (Proxmox VE)‌ 是一款开源的虚拟化管理平台,基于 Debian Linux 开发,支持虚拟机和容器的混合部署。它提供基于 Web 的集中管理界面,简化了计算、存储和网络资源的配置与监控。P…

ROS ROS2 机器人深度相机激光雷达多传感器标定工具箱

系列文章目录 目录 系列文章目录 前言 三、标定目标 3.1 使用自定义标定目标 四、数据处理 4.1 相机数据中的标定目标检测 4.2 激光雷达数据中的标定目标检测 输入过滤器: 正常估算: 区域增长: 尺寸过滤器: RANSAC&a…

android rtsp 拉流h264 h265,解码nv12转码nv21耗时卡顿问题及ffmpeg优化

一、 背景介绍及问题概述 项目需求需要在rk3568开发板上面,通过rtsp协议拉流的形式获取摄像头预览,然后进行人脸识别 姿态识别等后续其它操作。由于rtsp协议一般使用h.264 h265视频编码格式(也叫 AVC 和 HEVC)是不能直接用于后续处…

熊海cms代码审计

目录 sql注入 1. admin/files/login.php 2. admin/files/columnlist.php 3. admin/files/editcolumn.php 4. admin/files/editlink.php 5. admin/files/editsoft.php 6. admin/files/editwz.php 7. admin/files/linklist.php 8. files/software.php 9. files…

DeepSeek 与开源:肥沃土壤孕育 AI 硕果

当 DeepSeek 以低成本推理、多模态能力惊艳全球时,人们惊叹于国产AI技术的「爆发力」,却鲜少有人追问:这份爆发力的根基何在? 答案,藏在中国开源生态二十余年的积淀中。 从倪光南院士呼吁「以开源打破垄断」&#xf…

Maven中clean、compil等操作介绍和Pom.xml中各个标签介绍

文章目录 前言Maven常用命令1.clean2.vaildate3.compile4.test5.package6.verify7.install8.site9.deploy pom.xml标签详解格式<?xml version"1.0" encoding"UTF-8"?>(xml版本和编码)modelVersion&#xff08;xml版本&#xff09;groupId&#xff…

力扣刷题-热题100题-第35题(c++、python)

146. LRU 缓存 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/lru-cache/?envTypestudy-plan-v2&envIdtop-100-liked 双向链表哈希表 内置函数 对于c有list可以充当双向链表&#xff0c;unordered_map充当哈希表&#xff1b;python有OrderedDic…