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,一经查实,立即删除!

相关文章

抖音解压视频素材宝库

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

Elasticsearch Suggester

Elasticsearch里设计了4 种类别的 Suggester Term Suggester:词条建议器。对给输入的文本进进行分词,为每个分词提供词项建议。Phrase Suggester:短语建议器,在term的基础上,会考量多个term之间的关系Completion Sugg…

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

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

patch补丁命令学习

1.介绍 patch 是一个 Unix/Linux 工具,用于将补丁文件应用到原始文件中,从而更新文件内容。常用于软件开发中,特别是在维护和分发软件补丁时。 2.生成和应用patch文件 2.1 diff命令 :~$ cat testfile1 Hello,This is the firstfile! :~$ …

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

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

Qt中加入UI文件

将 UI 文件整合到 Qt 项目 使用 Qt Designer 创建 UI 文件: 在 Qt Creator 中使用 Qt Designer 创建 UI 文件,设计所需的界面。确保在设计中包含所需的控件(如按钮、文本框等),并为每个控件设置明确的对象名称&#xf…

生信分析进阶11 - 使用IMPUTE2进行预定相和基因型填充

1. IMPUTE2进行基因型填充 软件安装参考:生信软件38 - 基因型填充软件IMPUTE2 使用IMPUTE2与参考面板的最佳方法是向程序提供所有可用的单倍型,并让它选择使用哪些单倍型。 IMPUTE2不使用群体标签或个体之间相关性的其他全基因组数据,无论是对于参考单倍型还是被填充的个…

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

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

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

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

python+Mosh网课笔记01

太久没写python代码了,学机器学习重新拾起python,笔记比较简陋。 参考:mosh的python教程 一、入门 用vscode编写代码。下载了autopep8插件用于代码格式化。下载了pylint插件用于代码报错提示。 二、基本类型 int,bool&#x…

Shiro认证

1. Shiro简介 Shiro是一个强大且灵活的Java安全框架,专注于认证、授权、加密、会话管理等功能,能够无缝集成到现有的应用程序中。相比Spring Security,Shiro的学习曲线较为平缓,配置简单 (1) Shiro特性 认证(Authen…

节流函数throttle和防抖函数debounce

防抖函数:用于控制函数的执行频率,n秒后再执行,一定时间内,只执行最后触发一次,若n秒内重复触发,则重新计时。应用场景: 输入框输入事件、按钮点击事件、浏览器窗口大小调整事件等,手…

UI自动化测试示例:python+pytest+selenium+allure

重点应用是封装、参数化: 比如在lib文件夹下,要存储封装好的方法和必要的环境变量(指网址等) 1.cfg.py:封装网址和对应的页面 SMP_ADDRESS http://127.0.0.1:8234SMP_URL_LOGIN f{SMP_ADDRESS}/login.html SMP_URL_DE…

【微服务】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 添加配置文…

RU 19.24 Standalone(GI和DB分开打)

参考文档&#xff1a;Oracle Database Patch 36582629 - GI Release Update 19.24.0.0.240716 2.1.1.1 OPatch Utility Information 12.2.0.1.42 or later 2.1.1.2 Validation of Oracle Inventory 分别在GI和Oracle Home下执行 $ <ORACLE_HOME>/OPatch/opatch lsinven…

错误:SyntaxError: f-string: unmatched ‘(‘

报错代码&#xff1a; let platformList [[${entityList}]]; 提示错误原因&#xff1a; 报错这行代码 用到了thymeleaf 解析&#xff0c;因为 html页面 不仅在头部需要引入 <html lang"en" xmlns:shiro"http://www.pollix.at/thymeleaf/shiro&qu…

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

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

机器学习笔记-2

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

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

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

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

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