第22讲 初试Gin框架(安装)
本讲基于视频实际讲解内容整理
一、本讲概述
本讲是Go语言基础课程的最后一讲,老师演示了如何从零开始创建一个Go Web项目,安装Gin框架,并介绍了 go mod 模块管理的基本操作。
二、创建Web项目
2.1 创建项目目录
首先创建一个新的项目文件夹:
Shell
mkdir web
cd web
2.2 初始化 go mod
在新项目目录中,使用 go mod init 初始化模块:
Shell
go mod init web
执行后会生成 go.mod 文件,内容如下:
v
module web
go 1.21
go.mod是Go模块的声明文件,类似于Java Maven中的pom.xml,记录了模块名和Go版本。
三、安装Gin框架
3.1 使用 go get 安装
Shell
go get -u github.com/gin-gonic/gin
3.2 国内拉取慢的问题
老师在实际演示中遇到了国内拉取依赖速度很慢的问题。
原因:Go的依赖托管在GitHub等境外平台上,国内网络访问较慢。
3.3 解决方案
设置国内代理(Go 1.11+ 支持):
Shell
# 设置GOPROXY代理
go env -w GOPROXY=https://goproxy.cn,direct
# 设置GO111MODULE
go env -w GO111MODULE=on
设置代理后重新执行 go get,下载速度会大幅提升。
3.4 安装过程
执行 go get 后,Go会自动下载Gin框架及其所有依赖:
TEXT
go: downloading github.com/gin-gonic/gin v1.9.1
go: downloading github.com/gin-contrib/sse v0.1.0
go: downloading github.com/golang/protobuf v1.5.3
...
老师在课程中让同学们先等下载完成,下载的依赖会自动记录到
go.mod和go.sum文件中。
四、go.mod 和 go.sum
4.1 go.mod
安装Gin后,go.mod 会自动更新:
v
module web
go 1.21
require (
github.com/gin-gonic/gin v1.9.1
github.com/golang/protobuf v1.5.3
// ... 其他间接依赖
)
4.2 go.sum
go.sum 记录了所有依赖的哈希值,用于验证依赖的完整性,防止依赖被篡改。
五、编写第一个Gin程序
安装完成后,创建 main.go 文件:
Go
package main
import "github.com/gin-gonic/gin"
func main() {
// 1. 创建默认路由引擎
r := gin.Default()
// 2. 注册GET路由
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
// 3. 启动服务,默认监听 0.0.0.0:8080
r.Run()
}
5.1 代码解析
| 代码 | 说明 |
|---|---|
gin.Default() |
创建带有Logger和Recovery中间件的默认路由引擎 |
r.GET(path, handler) |
注册GET请求路由 |
"/ping" |
请求路径 |
func(c *gin.Context) |
匿名函数处理请求 |
c *gin.Context |
Gin核心上下文对象,包含请求和响应信息 |
c.JSON(code, obj) |
返回JSON格式的HTTP响应 |
gin.H |
map[string]interface{} 的快捷别名 |
r.Run() |
启动HTTP服务,默认端口8080 |
5.2 运行程序
Shell
go run main.go
启动后访问 http://localhost:8080/ping,会收到JSON响应:
JSON
{
"message": "pong"
}
六、Gin框架核心概念
6.1 Context(上下文)
gin.Context 是Gin框架中最核心的对象:
- 封装了HTTP请求和响应
- 贯穿整个请求的生命周期
- 提供了获取参数、返回响应、中间件等功能
Go
r.GET("/user/:name", func(c *gin.Context) {
name := c.Param("name") // 获取路径参数
age := c.Query("age") // 获取查询参数
c.JSON(200, gin.H{
"name": name,
"age": age,
})
})
6.2 匿名函数
Gin路由的第二个参数是一个匿名函数:
Go
// 匿名函数写法
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{"message": "pong"})
})
// 也可以提取为独立函数
func pongHandler(c *gin.Context) {
c.JSON(200, gin.H{"message": "pong"})
}
r.GET("/ping", pongHandler)
这就是第20讲中提到的匿名函数在实际框架中的应用。
七、go mod 常用命令回顾
| 命令 | 说明 |
|---|---|
go mod init 模块名 |
初始化新模块,生成 go.mod |
go mod tidy |
整理依赖:添加缺少的,删除无用的 |
go mod download |
下载依赖到本地缓存 |
go mod vendor |
将依赖复制到项目vendor目录 |
go get -u 包路径 |
下载并安装依赖包 |
go get -u 包路径@版本 |
安装指定版本 |
八、从基础到框架的学习路径
老师在本讲中展示了学完Go基础语法后,如何开始使用Web框架:
TEXT
Go基础语法(第1-21讲)
↓
go mod 初始化项目
↓
go get 安装框架依赖
↓
编写Gin Web程序
↓
运行并测试
老师在前面课程中提到的所有知识点(函数、结构体、切片、Map、匿名函数、可变参数等)在Gin框架代码中都有体现。学完基础后,看框架代码已经能理解大部分内容了。
九、本讲小结
| 知识点 | 要点 |
|---|---|
| 创建项目 | 新建目录 + go mod init 模块名 |
| go.mod | 模块声明文件,记录依赖 |
| go.sum | 依赖哈希校验文件 |
| 安装Gin | go get -u github.com/gin-gonic/gin |
| 国内加速 | 设置 GOPROXY=https://goproxy.cn,direct |
| gin.Default() | 创建默认路由引擎 |
| r.GET() | 注册GET路由 |
| gin.Context | 核心上下文对象 |
| c.JSON() | 返回JSON响应 |
| r.Run() | 启动HTTP服务(默认8080端口) |
| 匿名函数 | Gin路由处理函数使用匿名函数 |
十、课后练习
- 创建一个新的Go项目,使用
go mod init初始化 - 设置GOPROXY代理加速依赖下载
- 安装Gin框架:
go get -u github.com/gin-gonic/gin - 编写一个Gin程序,注册
/hello路由,返回{"message": "Hello, Gin!"} - 启动服务,在浏览器中访问测试
- 尝试注册多个路由(如
/、/about、/user/:name),返回不同的JSON - 思考:Gin框架中用到了前面学过的哪些Go基础知识?(提示:函数、匿名函数、结构体、Map、指针等)