安装与快速开始
Gin 是一个用 Go 编写的高性能 HTTP Web 框架。它提供了类似 Martini 的 API,但得益于 httprouter,性能快达 40 倍。Gin 专为构建 REST API、Web 应用和微服务而设计。
官网文档:Gin Web Framework
前置条件
- Go 版本:Gin 需要 Go 1.25 或更高版本
- Go Modules:推荐使用 Go Modules 管理依赖
安装
go get github.com/gin-gonic/gin第一个程序
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
// 创建带有默认中间件(Logger + Recovery)的路由器
r := gin.Default()
// 定义 GET /ping 端点
r.GET("/ping", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "pong",
})
})
// 默认监听 0.0.0.0:8080
r.Run()
}go run main.go访问 http://localhost:8080/ping,返回 {"message":"pong"} 即成功。
Gin 模式
Gin 有三种运行模式,通过 GIN_MODE 环境变量或代码设置:
| 模式 | 说明 | 适用场景 |
|---|---|---|
debug |
默认模式。输出详细的调试日志和路由信息 | 本地开发 |
release |
生产模式。关闭调试输出,优化性能 | 生产环境 |
test |
测试模式。抑制日志输出 | 单元测试 |
// 代码中设置模式
gin.SetMode(gin.ReleaseMode)
gin.SetMode(gin.TestMode)
gin.SetMode(gin.DebugMode)
// 检查当前模式
if gin.Mode() == gin.ReleaseMode {
// 生产环境逻辑
}# 环境变量设置
export GIN_MODE=release💡 最佳实践:生产环境务必使用
release模式,可减少不必要的内存分配和日志开销。
gin.Default() vs gin.New()
| 方法 | Logger | Recovery | 适用场景 |
|---|---|---|---|
gin.Default() |
✅ 内置 | ✅ 内置 | 快速开发,标准应用 |
gin.New() |
❌ 无 | ❌ 无 | 自定义中间件栈 |
// 空白引擎:完全掌控中间件
r := gin.New()
r.Use(gin.Logger()) // 手动添加 Logger
r.Use(gin.Recovery()) // 手动添加 Recovery💡 当你需要自定义日志格式或使用第三方日志库(slog、zerolog)时,使用
gin.New()获得完全控制权。
基本项目结构推荐
project/
├── main.go // 入口:组装路由、启动服务器
├── router/
│ └── router.go // 路由注册
├── handler/ // 处理函数(按业务模块划分)
├── middleware/ // 自定义中间件
├── model/ // 数据模型 & 绑定结构体
├── config/
│ └── config.go // 配置管理
└── go.mod💡 小型项目可以从单个
main.go开始;中型以上建议按此结构分层,保持关注点分离。