这是 Gin 框架最核心、最常用、必须彻底搞懂的函数
我用源码级 + 大白话 + 实战场景给你讲透,看完你就完全明白它到底做了什么。
一、先给结论(最核心)
go
r := gin.Default()
等价于:
go
r := gin.New()
r.Use(gin.Logger(), gin.Recovery())
一句话总结:
gin.Default() = 新建路由引擎 + 默认挂载 2 个官方必备中间件
二、底层源码(一看就懂)
Gin 源码里是这样写的:
go
func Default() *Engine {
debugPrintWARNINGDefault()
engine := New()
engine.Use(Logger(), Recovery())
return engine
}
做了 3 件事:
New():创建一个空的 Gin 引擎Use(Logger()):加载日志中间件(打印请求日志)Use(Recovery()):加载崩溃恢复中间件(服务 panic 不崩溃)
三、两个默认中间件到底干嘛?
1. gin.Logger() 日志中间件
作用:
- 自动打印每个请求的
- 请求方法(GET/POST)
- 请求路径
- 状态码
- 响应时间
- 客户端IP
控制台你会看到:
[GIN] 2025/04/20 15:00:00 | 200 | 0.001s | | GET "/"
2. gin.Recovery() 崩溃恢复中间件
作用:
- 代码出现 panic(空指针、数组越界等)
- 服务不会挂掉
- 返回 500 错误
- 继续正常处理其他请求
这是生产环境必备。
四、gin.Default() vs gin.New() 区别(面试常问)
1. gin.Default()
- 带 Logger + Recovery
- 开发、生产都能用
- 99% 项目都用这个
2. gin.New()
- 空引擎,什么中间件都没有
- 无日志
- panic 直接整个服务崩溃
- 只有极特殊场景才用
五、gin.Default() 返回什么?
返回 *gin.Engine
它是 Gin 的:
- 路由容器
- 中间件管理
- HTTP 服务入口
你后面所有操作:
- GET/POST 注册
- 路由分组
- 静态资源
- 模板加载
都基于这个 engine。
六、完整等价代码(帮助你理解)
你写:
go
r := gin.Default()
完全等于:
go
// 1. 创建空引擎
r := gin.New()
// 2. 添加日志
r.Use(gin.Logger())
// 3. 添加崩溃恢复
r.Use(gin.Recovery())
七、最标准 Gin 启动流程(企业项目都这样)
go
package main
import "github.com/gin-gonic/gin"
func main() {
// 1. 创建默认引擎(带日志+恢复)
r := gin.Default()
// 2. 路由
r.GET("/", func(c *gin.Context) {
c.JSON(200, gin.H{
"msg": "hello gin",
})
})
// 3. 启动
r.Run(":8080")
}
八、超级重点总结(背会这 5 条)
- gin.Default() 是创建 Gin 实例最标准、最推荐的方法
- 它自动带 Logger 和 Recovery
- Logger:打印请求日志
- Recovery:服务 panic 不崩溃
- 几乎所有项目,永远用 gin.Default()