gin.default()默认启用logger和recovery中间件,适合开发调试;生产环境需自定义中间件时应使用gin.new()。

gin.Default() 创建的引擎默认启用 Logger 和 Recovery 中间件,适合开发调试;生产环境若需关闭日志或自定义中间件,应改用 gin.New()。
如何注册基础 HTTP 方法路由
Gin 提供了按 HTTP 方法命名的快捷方法,本质是 r.Handle() 的封装,语义清晰、不易出错。
-
r.GET()用于获取资源,如/users或/users/:id -
r.POST()用于创建资源,注意 body 解析依赖Content-Type(如application/json需用c.ShouldBindJSON()) -
r.PUT()和r.PATCH()都用于更新,但PUT要求全量替换,PATCH是局部更新 —— Gin 不强制校验语义,靠业务逻辑保证 -
r.DELETE()删除资源,返回204 No Content更符合 REST 规范,但c.String(200, "ok")也能用 - 不关心方法类型时可用
r.Any(),比如健康检查/health接受任意方法
怎么写带参数的路由:path parameter vs query parameter
路径参数(:id)用于标识资源本身,查询参数(?page=1&limit=10)用于过滤或分页 —— 混用会导致语义混乱和缓存失效。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 路径参数必须用
c.Param("id")获取,例如r.GET("/user/:id", ...)→c.Param("id") - 查询参数用
c.Query("page")(无默认值)或c.DefaultQuery("page", "1")(带默认) - 如果路径中用了
:id,但请求没传,Gin 不报错,c.Param("id")返回空字符串 —— 必须手动校验非空 - 多个路径参数如
/user/:uid/post/:pid,每个都要单独c.Param()取,不能合并
为什么需要路由组(Group)
路由组不是语法糖,而是解决真实工程问题的机制:统一前缀、批量挂中间件、模块化组织。
-
api := r.Group("/api/v1")后,所有子路由自动带/api/v1前缀,避免重复写死 - 中间件可只对某组生效,例如
v1.Use(AuthMiddleware),而/health不走鉴权 - 不同业务域可拆成独立文件,如
userRouter.Init(api)、orderRouter.Init(api),Init函数内部只注册本模块路由 - 注意:Group 不支持嵌套 Group 的嵌套调用(如
g1.Group("v2").Group("admin")),应扁平展开
常见错误:404、405 和重定向陷阱
Gin 默认开启 RedirectTrailingSlash 和 RedirectFixedPath,这在某些场景下反而引发问题。
- 访问
/user/123/(带尾斜杠)被 301 重定向到/user/123—— 前端若未处理重定向,AJAX 请求会失败 - 大小写敏感路由如
/User和/user默认不互通,开启RedirectFixedPath后可能意外重定向,破坏 API 稳定性 - 405 Method Not Allowed 通常是因为:注册了
GET /login,但前端发了POST;或用了r.POST()却用 GET 访问 - 关闭自动重定向:初始化引擎时用
r := gin.New(),再手动r.Use(gin.Logger(), gin.Recovery()),然后设置r.RedirectTrailingSlash = false
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










