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

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

相关文章

deepin V23 部署Ollama

系统:Deepin V23 1.Ollama简单介绍 Ollama是一个开源的大语言模型本地部署工具,通过它可以方便的在本机部署开源大模型。 Ollama仓库地址:https://github.com/ollama/ollama Ollama官方下载地址:https://…

多个NVR同时管理EasyNVR多品牌NVR管理工具/设备助力KTV视频监控建设

随着娱乐产业的蓬勃发展,KTV作为一种集唱歌、聚会、休闲于一体的娱乐场所,深受大众喜爱。然而,随着人流量的增加和夜间营业的特性,KTV的安全问题也日益凸显。在这样的背景下,NVR监测软件/设备EasyNVR的引入不仅成为了一…

HCIP——以太网交换安全(四)DHCP Snooping

目录 一、DHCP Snooping的知识点 二、DHCP Snooping实验拓扑 三、总结 一、DHCP Snooping的知识点 1.1、DHCP snooping 概述: ①DHCP Snooping使能DHCP的一种安全特性,用于保证DHCP客户端从合法的DHCP服务端获取IP地址。DHCP服务器记录DHCP客户端IP…

PL/SQL Developer15和Oracle Instant Client安装配置详细图文教程

一、下载介质 1、Oracle Instant Client Oracle Instant Client Downloads | Oracle 中国 2、PL/SQL DEVELOPER PL/SQL Developer - Allround Automations Free trial - Allround Automations 二、安装介质。 1、安装plsqldev1504x64.msi。 一路默认下一步。 选择输入许可信…

Facebook的AI驱动发展:人工智能如何改变社交体验

个性化内容推荐 Facebook利用AI算法分析用户的行为数据,包括点赞、评论、分享和浏览历史。这些数据使得平台能够深入了解用户的兴趣和偏好,从而提供个性化的内容推荐。例如,用户在浏览动态时,AI系统会根据用户的互动历史&#xf…

大学生项目竞赛:如何通过面试选拔优秀队友

大学生项目竞赛:如何通过面试选拔优秀队友 面试前的自我提问行为面试法:识别真实水平选人后的用人策略结语 作为一名积极参与各类项目竞赛的大学生,我深刻体会到团队成员的选择对于项目成功的重要性。在这篇文章中,我将分享我的一…

计算机毕业设计 基于Python的社交音乐分享平台的设计与实现 Python毕业设计 Python毕业设计选题【附源码+安装调试】

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

用Aconvert.com将MOBI文件转换为PDF:一步步指南

在今天的数字时代,文件格式转换是日常办公和学习中常见的需求之一。MOBI格式的电子书文件在某些设备上不太方便阅读,而PDF格式则更加通用。本文将为你详细介绍如何使用Aconvert.com将MOBI文件转换为PDF文件。 1. 访问Aconvert.com 首先,打开…

【数据库设计】逻辑结构设计

E-R实体集的转换 概念结构设计之后就是对E-R图进行逻辑结构设计:即将E-R图转化成关系的过程。逻辑结构设计主要用于数据库管理系统上,为了让数据在计算机系统中更好地表示。 此设计过程用到的数据模型有:除了前面讲过的关系模型还有层次模型…

功能驱动方法是什么?如何有效管理技术债务以避免项目风险?

在软件开发和项目管理领域,“功能驱动方法”(Feature-Driven Development, FDD)和“技术债务”(Technical Debt)是两个与项目成功紧密相关的重要概念。功能驱动方法是一种高效的敏捷开发方式,而技术债务则代…

飞腾D3000多核性能

飞腾d3000多核应该超过龙芯3a6000不小于30%,所以了肯定超过10100。d3000单核应该比海光3250强一点点,多核可能稍有不如,因为没有超线程。 3A6000单核,多核性能均明显不如飞腾D3000,兆芯KX-7000,海光3350&a…

【Kenel】基于 QEMU 的 Linux 内核编译和安装

文章目录 安装虚拟机系统共享目录编译内核卸载内核参考资料 本文主要记录个人做存储系统研究时,在 QEMU 环境下编译和安装 Linux 内核的过程 安装虚拟机系统 之前在 利用 RocksDB ZenFS 测试 ZNS 的环境搭建和使用 给出过借助 VNC 进行图形化安装的步骤&#xff…

如何轻松使用pip安装Git仓库中的私有Python模块(使用pip和Git仓库发布和安装私有Python模块)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 Git模块 📒📝 Git仓库要求🔖 项目目录结构🔖 文件说明📝 编写setup.py📝 配置MANIFEST.in📝 推送代码到Git仓库📝 使用pip安装模块🔖 使用用户名和密码🔖 使用Personal Access Token (PAT)🔖 示例📝 更…

Linux系统——ssh远程连接

Linux系统——ssh远程连接 一、ssh协议介绍1、远程连接协议2、ssh服务基本操作3、ssh常用操作 二、ssh加密1、加密算法类型2、对称加密算法3、非对称加密算法 三、免密ssh的配置1、ssh认证方式2、配置免密ssh3、ssh-copy-id做了什么? 四、ssh服务配置 一、ssh协议介…

基于Java微信小程序的的儿童阅读系统的详细设计和实现(源码+lw+部署文档+讲解等)

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不…

【解决proto文件生成的java 在intellij idea引用会报错】

现象 下载新项目 代码有引用proto生成的java类 会一直报红 我的idea版本2024.2.3,比较新,自动装载了插件,旧版本需要自己装 解决方式 Maven生成资源 这一步是为了先从proto生成java文件 安装这个插件 右键项目->Maven->Generated…

国产电脑能装win系统吗_国产电脑安装windows要求及方法

国产电脑能装win系统吗?‌国产电脑可以安装Windows系统,但需要满足特定条件。‌‌目前只有CPU基于X86架构国产电脑才可以安装windows。下面小编就和大家一起来分析下国产电脑安装windows要求及方法。 国产电脑能装win系统吗? 答:‌国产电脑可…

天锐绿盾 vs Ping32:企业级加密软件大比拼

在信息安全日益重要的今天,企业级加密软件成为了企业保护敏感数据的得力助手。在众多加密软件中,天锐绿盾与Ping32凭借各自的优势,赢得了市场的广泛认可。那么,这两款软件究竟有何异同?哪款更适合您的企业呢&#xff1…

【Linux】进程优先级进程切换

文章目录 进程优先级查看进程优先级进程优先级的修改 进程切换进程切换的概念 总结 进程优先级 进程优先级是操作系统中用于决定进程调度顺序的重要属性。它表示一个进程在系统资源分配和 CPU 调度中的相对重要性。优先级越高的进程通常会获得更多的 CPU 时间和资源&#xff0…

【网页设计】CSS 盒子模型

目标 能够准确阐述盒子模型的 4 个组成部分能够利用边框复合写法给元素添加边框能够计算盒子的实际大小能够利用盒子模型布局模块案例能够给盒子设置圆角边框能够给盒子添加阴影能够给文字添加阴影 1. 盒子模型 页面布局要学习三大核心, 盒子模型, 浮动 和 定位. 学习好盒子模…