💜 想真正擅长编程? 从一门课程开始,100% 免费

《笔记》第二十二篇 初试Gin框架(安装)

第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路由处理函数使用匿名函数

十、课后练习

  1. 创建一个新的Go项目,使用 go mod init 初始化
  2. 设置GOPROXY代理加速依赖下载
  3. 安装Gin框架:go get -u github.com/gin-gonic/gin
  4. 编写一个Gin程序,注册 /hello 路由,返回 {"message": "Hello, Gin!"}
  5. 启动服务,在浏览器中访问测试
  6. 尝试注册多个路由(如 /、/about、/user/:name),返回不同的JSON
  7. 思考:Gin框架中用到了前面学过的哪些Go基础知识?(提示:函数、匿名函数、结构体、Map、指针等)