Gin框架操作指南01:开山篇

Gin是目前最流行,性能最好的的GoWeb框架,几乎成为了学习GoWeb必备的知识。本人最近也在学Gin,在b站搜了很多教程,发现有的教程不够详细,有的教程工具包安装有问题,而官方文档的很多示例代码又不全,不容易实现,于是我就想,能不能通过问ChatGPT来弥补这点?毕竟我们是学技术的,与时俱进才是常态,学习方法也是一样。所以,一套基于官方文档和ChatGPT的Gin教程就诞生了!本教程的目的是学会快速使用框架的各种功能,而不是剖析代码,毕竟框架就是为了方便他人使用而诞生的。换句话说,本教程只负责让官方示例代码怎么跑起来,而不介绍示例涉及的各种概念,这些百度下或者用多了自然会知道。废话不多说,让我们开启Gin学习之旅吧!

官方项目地址:https://github.com/gin-gonic/gin
官方文档地址(中文):https://gin-gonic.com/zh-cn/docs/

注:本文不设目录,因为每一节都是循序渐进的。

一、知识点分类

官方文档的示例部分列出的知识点很多,共44个,但不分顺序,所以看起来错综复杂。实际上,这些知识点可以划分为几个大类,本人将其划分为七大类,每个知识点都附上了原文链接:

1. 数据渲染(共7个知识点)
AsciiJSON
HTML渲染
JSONP
PureJSON
SecureJSON
XML/JSON/YAML/ProtoBuf 渲染
多模板
2. 请求参数处理(共15个知识点)
模型绑定和验证
Multipart/Urlencoded 绑定
Multipart/Urlencoded 表单
绑定 HTML 复选框
绑定 Uri
绑定表单数据至自定义结构体
绑定查询字符串或表单数据
将 request body 绑定到不同的结构体中
查询字符串参数
上传文件
设置和获取 Cookie
映射查询字符串或表单参数
只绑定 url 查询字符串
Query 和 post form
从 reader 读取数据
3. 路由与中间件(共6个知识点)
路由参数
路由组
使用中间件
自定义中间件
不使用默认的中间件
在中间件中使用 Goroutine
4. 日志与安全(共6个知识点)
定义路由日志的格式
如何记录日志
控制日志输出颜色
安全页眉
使用 BasicAuth 中间件
使用 HTTP 方法
5. 静态文件与资源管理(共2个知识点)
静态文件服务
静态资源嵌入
6. 服务器与高级功能(共5个知识点)
HTTP2 server 推送
优雅地重启或停止
运行多个服务
支持 Let’s Encrypt
重定向
7. 自定义与配置(共3个知识点)
自定义 HTTP 配置
自定义日志文件
自定义验证器

以下是对这七类的大致介绍:

  1. 数据渲染
    数据渲染是将数据格式化为可在前端展示的形式。这一类知识点涵盖了如何生成不同格式的响应数据,如 JSON、HTML、XML 等,确保后端数据能够以用户友好的方式呈现给客户端

  2. 请求参数处理
    请求参数处理涉及如何从客户端请求中提取和解析数据。这包括处理 POST 和 GET 请求中携带的各种数据,如表单数据、查询字符串等。了解如何绑定和验证这些请求参数是实现数据交互的关键。

  3. 路由与中间件
    路由和中间件是构建 Web 应用程序的核心部分。路由负责将请求映射到相应的处理函数,而中间件则提供了一种机制,可以在请求处理的生命周期中执行特定的功能,如身份验证、日志记录等。

  4. 日志与安全
    这一类知识点关注于应用程序的安全性和可维护性。包括记录日志、设置安全头部、实现用户认证等。这些措施可以帮助开发者监控应用的运行状态,及时发现和解决潜在问题。

  5. 静态文件与资源管理
    静态文件和资源管理主要涉及如何处理静态文件(如 HTML、CSS、JavaScript 和图像文件)以及如何将这些文件嵌入到应用中。有效的静态资源管理可以提高应用的性能和用户体验。

  6. 服务器与高级功能
    这一类知识点涵盖了服务器的配置和高级功能,如支持 HTTP2、优雅地重启服务器、使用 Goroutine 实现并发处理等。这些功能可以增强应用的性能和可扩展性

  7. 自定义与配置
    自定义与配置涉及如何根据项目需求调整和扩展 Gin 框架的功能。包括自定义 HTTP 配置、日志管理和验证器等,允许开发者根据特定需求进行灵活配置,提高开发效率和代码的可读性。

二、初始化工作区

本教程使用工作区机制来管理项目,需要Go1.18及以上版本,具体介绍见golang必备管理方法,这里已经给大家写好了建立工作区的程序。
首先创建一个文件夹作为工作区,然后创建main.go,填充代码:

package mainimport ("fmt""os""os/exec"
)func main() {// 定义文件夹名称folderNames := []string{"第一个Gin应用", "数据渲染", "请求参数处理", "路由与中间件","日志与安全", "静态文件与资源管理", "服务器与高级功能", "自定义与配置",}// 创建文件夹并初始化 Go 模块for i, name := range folderNames {// 生成文件夹名称folderName := fmt.Sprintf("%02d%s", i, name)// 创建文件夹err := os.Mkdir(folderName, os.ModePerm)if err != nil {fmt.Printf("创建文件夹 %s 失败: %v\n", folderName, err)continue}// 切换到新创建的文件夹err = os.Chdir(folderName)if err != nil {fmt.Printf("切换到文件夹 %s 失败: %v\n", folderName, err)continue}// 初始化 Go 模块,模块名为序号modName := fmt.Sprintf("%02d", i)cmd := exec.Command("go", "mod", "init", modName)if err := cmd.Run(); err != nil {fmt.Printf("初始化模块 %s 失败: %v\n", modName, err)} else {fmt.Printf("成功创建文件夹 %s 并初始化模块 %s\n", folderName, modName)}// 切换回原始目录os.Chdir("..")}// 初始化工作区并添加所有项目cmd := exec.Command("go", "work", "init")out, err := cmd.CombinedOutput() // 捕获输出if err != nil {fmt.Printf("初始化工作区失败: %v\n输出: %s\n", err, out)return}// 添加所有项目到工作区for i := range folderNames {folderName := fmt.Sprintf("%02d%s", i, folderNames[i])cmd = exec.Command("go", "work", "use", folderName)if err := cmd.Run(); err != nil {fmt.Printf("添加 %s 到工作区失败: %v\n", folderName, err)} else {fmt.Printf("成功将 %s 添加到工作区\n", folderName)}}
}

执行上述代码后,会得到8个文件夹(项目),这样的话,其中一个项目下载包,其余项目就无需重复下载

三、第一个Gin应用

cd到00目录,执行如下命令,安装gin框架:

go get -u github.com/gin-gonic/gin

创建main.go,填充代码:

package mainimport ("github.com/gin-gonic/gin" // 引入 Gin 框架
)func main() {// 创建一个默认的 Gin 路由引擎实例r := gin.Default()// 定义一个 GET 请求的路由// 第一个参数是请求的路径,第二个参数是处理该请求的函数r.GET("/ping", func(c *gin.Context) {// 使用 JSON 格式返回响应,状态码为 200,内容为 {"message": "pong"}c.JSON(200, gin.H{"message": "pong",})})// 启动服务,监听在 0.0.0.0:8080 上// 这里的 0.0.0.0 表示接受来自任何 IP 的请求// 如果你将第一个参数写为 "/",则可以直接输入 `localhost:8080` 后按回车访问r.Run() // 启动服务// 注意:启动程序后,它将一直监听指定的端口,不会主动结束。// 如果你对代码进行修改,需要先结束当前程序,方法可以是在命令行中按 Ctrl+C,或者在 IDE 中选择关闭程序。
}

执行程序,打开浏览器(以Chrome浏览器为例),输入localhost:8080/ping,回车,效果如下:
在这里插入图片描述
特别注意:启动程序后,它将一直监听指定的端口,不会主动结束。如果你对代码进行修改,需要先结束当前程序,方法可以是在命令行中按 Ctrl+C,或者在 IDE 中选择关闭程序。

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

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

相关文章

抖音解压视频素材宝库

在快节奏的生活中,解压视频成为抖音上的热门内容类型,想要制作出精彩的解压视频,优质素材必不可少。今天,为大家推荐几个超棒的抖音解压视频素材网站,让你的创作之路轻松无忧! 蛙学网 作为国内知名的短视频…

深度解析计数排序:原理、特性与应用

目录 💯引言 💯计数排序的原理 ⭐核心概念 ⭐工作流程 1.确定计数范围 2.统计元素出现次数 3.计算累计计数 4.放置元素到正确位置 💯计数排序的实现 ⭐代码示例(以 C 为例) ⭐时间复杂度分析 ⭐稳定性分析…

【AI学习】Mamba学习(七):HiPPO通用框架介绍

HiPPO这篇论文《HiPPO: Recurrent Memory with Optimal Polynomial Projections》,提出了一个通用框架。 我们再重新看一下论文的摘要: 从连续数据中学习的一个核心问题是,随着更多数据的处理,以增量方式表示累积历史。我们介绍了…

「规模焦虑」如影随形,库迪咖啡想靠便捷店突围能行吗?

作者 | 辰纹 来源 | 洞见新研社 “我有一个广东的小兄弟,做了9年的奶茶,后来因为觉得咖啡是一个上升期的赛道,所以毅然决然拿了45万加盟了库迪咖啡,结果全亏损完了,相当于只买了一个配方。” 抖音博主茶饮圈大山哥分…

Vite创建Vue3项目以及Vue3相关基础知识

1.创建Vue3项目 1.运行创建项目命令 # 使用 npm npm create vitelatest2、填写项目名称 3、选择前端框架 4、选择语法类型 5、按提示运行代码 不出意外的话,运行之后应该会出现 下边这个页面 6.延伸学习:对比webpack和vite(这个是面试必考…

【微服务】springboot远程docker进行debug调试使用详解

目录 一、前言 二、线上问题常用解决方案 2.1 微服务线上运行中常见的问题 2.2 微服务线上问题解决方案 2.3 远程debug概述 2.3.1 远程debug原理 2.3.2 远程debug优势 三、实验环境准备 3.1 搭建springboot工程 3.1.1 工程结构 3.1.2 引入基础依赖 3.1.3 添加配置文…

400行程序写一个实时操作系统(九):替换FreeRTOS的内存管理算法

前言 通过前面几章,笔者带领大家完成了内存管理算法的编写。 我们完成的内存管理算法,被称为小内存管理算法。我们也可以将它作为一个库,在后续的嵌入式开发中,使用我们自己编写的malloc,不仅效率会更高,…

机器学习笔记-2

文章目录 一、Linear model二、How to represent this function三、Function with unknown parameter四、ReLU总结、A fancy name 一、Linear model 线性模型过于简单,有很大限制,我们需要更多复杂模式 蓝色是线性模型,线性模型无法去表示…

如何匿名浏览网站,保护在线隐私?

在现如今的网络世界,在线隐私已不复存在。你总是被跟踪,即使你使用隐身模式也无济于事。隐身模式会阻止浏览器保存你的浏览历史记录。但它并不能阻止你的互联网服务提供商 (ISP)、雇主、学校、图书馆或你访问的网站看到你在网上做什么。 更有不法分子在未…

Lumerical学习——资源管理和运行模拟

一、资源管理(Resource Manager) 在模拟计算前必须对计算资源进行配置。采用资源管理器可以完成这项任务。单击主工具条的“资源(Resources)”按钮(见上图)就可以打开资源管理器。通常每个计算机只需设置一…

大型生物制药企业如何实现安全又高效地跨网域数据传输?

大型生物制药企业由于组织结构庞大、业务覆盖研发、生产及销售,因此内部会再细分为多个管理单位,包括研发部门、生产部门、质量控制部门、供应链管理部门及营销部和日常业务支撑部门等。在物理区域划分上,大型生物制药企业会设立实验室、研发…

摇人摇人, JD内推岗位(社招+校招)

摇人摇人, 有找工作的家人们看过来啊~ 虚位以待, 快到碗里来 算法开发工程师岗 京东云 北京|T7, 5-10年 岗位职责: 参与基于RAG知识库平台和ChatBI产品打造和商业化落地,进行相关技术:包括OCR、文档拆分、意图理解、多轮对话、NL2SQL、Embed…

mysql用户管理(user表列信息介绍,本质,管理操作),数据库的权限管理(权限列表,权限操作)

目录 用户管理 介绍 user表 介绍 列信息 Host User *_priv authentication_string 用户管理的本质 操作 创建用户 删除用户 修改用户信息 修改密码 自己修改 root用户修改指定用户的密码 数据库的权限 权限列表 给用户授权 查看权限 回收权限 刷新权限 …

Linux性能调优,还可以从这些方面入手

linux是目前最常用的操作系统,下面是一些常见的 Linux 系统调优技巧,在进行系统调优时,需要根据具体的系统负载和应用需求进行调整,并进行充分的测试和监控,以确保系统的稳定性和性能。同时,调优过程中要谨…

万界星空科技:智能称重打标系统

万界星空科技的称重系统是其为制造业,特别是线缆、漆包线、食品等行业提供的重要解决方案之一。以下是对该系统的详细介绍: 一、系统概述 万界星空科技称重系统是集成在其MES(制造执行系统)中的一个功能模块,专门用于…

基于springboot实习管理系统

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的,前后端分离。 开发语言:Java数据库:MySQL技术:…

React Agent 自定义实现

目录 背景 langchin 中的 agent langchin 中 agent 的问题 langchain 的 agent 案例 自定义 React Agent 大模型 工具定义 问题设定 问题改写,挖掘潜在意图 React Prompt 下一步规划 问题总结 代码 背景 之前使用过 langchian 中的 agent 去实现过一些…

2020年计算机网络408真题解析

第一题: 解析:OSI参考模型网络协议的三要素 网络协议的三要素:语法 ,语义,同步(时序) 语法:定义收发双方所交换信息的格式 语法:定义收发双方所要完成的操作 网页的加载 …

深入理解队列(Queue)的实现(纯小白进)

目录: 前言一、 什么是队列?1.1、 队列的特性1.2、 队列的图解 二、 队列的详细实现2.1、 队列不同的实现方式2.2、 队列结构体2.3、 队列的初始化2.4、 入队列2.5、 出队列2.6、 获取对头元素2.7、 获取队尾元素2.8、 队列的判空2.9、 队列有效的元素个数2.10、 队…

Kind部署的K8s证书过期后的解决方案

证书通常有效期为1年,一年后服务将不可用解决方案就是更新证书 1. 找到 Kind 集群的控制平面容器名称,容器名称不一定是这个 docker ps --filter "namekind-control-plane"2. 进入 Kind 控制平面的容器: docker exec -it kind-control-plane…