大家好,我是长林啊!一个爱好 JavaScript、Go、Rust 的全栈开发者和 AI 探索者;致力于终生学习和技术分享。
本文首发在我的微信公众号【长林啊】,欢迎大家关注、分享、点赞!
在学习了一段时间的 Go 语言基础后,掌握一门编程语言的语法只是第一步,如何运用它来构建实际的项目才是关键。我还查阅了 Go 官方用户 2024 调查报告,找到 Go 应用最广泛的领域调查结果图:
从上图可以看出使用 Go 构建 API/RPC 类型的项目竟高达 76%;对于 Web 开发而言,一个轻量级、高性能的 Web 框架至关重要,而 Gin 正是 Go 生态中最受欢迎的 Web 框架之一。
Gin 以其简洁的 API 设计、高效的路由处理和强大的中间件机制,成为了许多开发者的首选框架。相较于标准库 net/http
,Gin 提供了更加优雅且易用的方式来处理路由、请求参数、JSON
解析等功能,同时它基于 httprouter
进行了优化,使其在处理大量请求时依然保持高效,并让开发者可以更加专注于业务逻辑的实现。
初识Gin:Hello World之旅
本系列文章的环境配置如下:
- Go:1.24
- Gin:1.10
- OS:Mac M1 14.1.2
- VS Code:1.97.2
环境准备
- IDE 配置
这个倒是没有什么严格的限制,找一个自己熟悉的工具都没问题,比如 VS Code、Golang 都没有问题,只是 JetBrains 公司的 Golang 是一个收费的工具,不过可以免费试用 30 天。本系列文章就是用免费的开发者工具 VS Code 进行编码环境的搭建。
使用 VS Code 还需要安装一些插件来辅助开发,当然这也不是必须的,我这里就推荐:
如果不想去挨个挨个安装的话,可以直接安装 Go Extension Pack:
它里面包含了上面提到的 Go 插件。
实现一个简单的 RESTful API
我们先通过一个简单的 RESTful API 示例,快速了解它的基本使用方式。
1. 初始化项目安装 Gin
-
创建文件
shellmkdir 01-hello-world
-
进入
01-hello-world
初始化项目sh> go mod init hello-world go: creating new go.mod: module hello-world go: to add module requirements and sums: go mod tidy
-
如果你的 Go 环境还没有安装 Gin,可以使用
go get
进行安装:shgo get -u github.com/gin-gonic/gin
2. 编写第一个 Gin 服务(Hello, Gin!)
在 01-hello-wrold
目录下创建一个 main.go
文件,编写如下代码:
go
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
// 创建 Gin 路由实例
r := gin.Default()
// 定义一个简单的 GET 接口
r.GET("/api/hello", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "Hello, Gin!",
})
})
// 启动服务,监听 8080 端口
r.Run(":8080")
}
在这个示例中:
gin.Default()
创建了一个 Gin 路由实例,默认启用了 Logger 和 Recovery 中间件。r.GET("/api/hello", func(c *gin.Context) {...})
定义了一个GET
请求的接口,返回JSON
格式的响应数据。r.Run(":8080")
启动 HTTP 服务器,监听 8080 端口。
在终端中执行 go run main.go
命令启动服务器,终端效果如下图:
如果一切正常,你会看到类似下面的日志输出:
sh
[GIN-debug] Listening and serving HTTP on :8080
然后,在浏览器或 curl
访问 http://localhost:8080/api/hello
:
sh
curl http://localhost:8080/api/hello
你将会得到如下响应:
json
{ "message": "Hello, Gin!" }
这里就不一一演示 POST、PUT、PATCH、DELETE 等方法了;关键代码如下:
go
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
// 创建 Gin 路由实例
r := gin.Default()
// 定义一个简单的 GET 接口
r.GET("/api/hello", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "Hello, Gin!",
})
})
// 定义一个简单的 POST 接口
r.POST("/api/hello", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "Hello, Gin!",
})
})
// 定义一个简单的 PUT 接口
r.PUT("/api/hello", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "Hello, Gin!",
})
})
// 定义一个简单的 PATCH 接口
r.PATCH("/api/hello", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "Hello, Gin!",
})
})
// 定义一个简单的 DELETE 接口
r.DELETE("/api/hello", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "Hello, Gin!",
})
})
// 启动服务,监听 8080 端口
r.Run(":8080")
}
你可会觉得这里都在重复写
/api/hello
,如果有这样的疑问就对了,后面我们会介绍到Group
这个方法。
这样,我们就成功搭建了一个 RESTful API ,并使用 Gin 处理 GET
、POST
、PUT
、PATCH
、DELETE
请求。
热更新
在本地开发 Gin 应用时,你可能会遇到这样的问题:每次修改代码后,都需要手动停止进程、重新编译并启动服务,这无疑影响了开发效率。相比于前端开发中的 Hot Reload(热重载) 机制,Go 语言的标准运行方式显得有些繁琐。
为了解决这个问题,我们可以使用热更新(Hot Reloading) 工具,让 Gin 代码在修改后自动生效,而无需手动重启。常见的 Go 热更新工具包括:
接下来,我们分别介绍 air 和 fresh 的安装与使用方式。
使用 air 进行热更新
1. 安装 air
使用 go install
命令全局安装 air
:
sh
go install github.com/air-verse/air@latest
如果在 docker 容器中使用,也可以使用 docker 的安装方式;
2. 生成 Air 配置文件(可选)
air
允许自定义监控文件和重启规则,可以使用以下命令生成默认配置文件:
sh
air init
这将生成 .air.toml
配置文件,里面包含了代码热更新的规则,你可以根据需要修改。
3. 启动服务
在项目根目录下运行 air
,它会自动监视代码变动并重启服务:
现在,你可以修改 main.go
,比如更改 message
的内容,保存后 air
会自动重启,访问 http://localhost:8080/api/hello
就能看到最新的结果。
使用 fresh 进行热更新
1. 安装 fresh
使用 go install
命令安装 fresh
:
sh
go install github.com/gravityblast/fresh@latest
同样,如果无法找到 fresh
命令,需要将 $GOPATH/bin
加入环境变量:
sh
export PATH=$PATH:$(go env GOPATH)/bin
2. 启动服务
在项目根目录下运行 fresh
,它会自动监听代码变动并重启服务:
sh
fresh
类似于 air
,fresh
也会在代码变更时自动重新编译并运行应用,但 fresh
的默认配置更加简单,适合小型项目或快速开发。
Air vs Fresh:如何选择?
工具 | 适用场景 | 主要特点 |
---|---|---|
air | 适用于大中型项目,功能更丰富 | 支持 .air.toml 配置,允许自定义监听规则 |
fresh | 适用于小型项目,零配置 | 安装即用,适合快速开发 |
如果你希望有更强的可定制性和稳定性,建议使用 air ;如果只是想要简单的热更新功能,Fresh 会更轻量级一些。
总结
在掌握 Go 语言的基础语法后,如何应用它构建实际项目才是关键。而在 Web 开发领域,Gin 作为 Go 生态中最受欢迎的 Web 框架之一,以其高性能、简洁的 API 设计和强大的中间件机制,成为开发者的首选。
介绍 Gin 框架后,通过一个简单的示例实现 RESTful API 的开发,然后我们接着介绍了 air 和 fresh 两种热更新工具,让代码在修改后自动生效,提高开发体验。
后面我们将继续深入学习 Gin 的 路由管理、参数解析、中间件使用 等,以构建更完善的 Web API。技术成长,永远在路上。与君共勉!