gin.Default()创建的引擎默认启用Logger和Recovery中间件,适合开发调试;生产环境应改用gin.New()并手动注册所需中间件。

gin.Default() 创建的引擎默认启用 Logger 和 Recovery 中间件,适合开发调试;生产环境若需精简中间件或自定义行为,应改用 gin.New()。
怎么注册 GET/POST 等基础 HTTP 方法路由
直接调用 r.GET()、r.POST() 等方法是最常用方式,它们本质是 r.Handle() 的封装,参数顺序固定:路径字符串 + 处理函数。
- 路径不支持正则,但支持通配符和命名参数(如
/user/:id、/file/*filepath) - 重复注册相同路径+相同方法会 panic,Gin 不做覆盖,必须显式避免
-
r.Any()可匹配任意 HTTP 方法,适合健康检查等通用端点,但别滥用——它绕过 REST 语义,也影响 OpenAPI 文档生成 - 如果需要同时支持多个方法(比如 CORS 预检),
r.OPTIONS()必须单独注册,不能靠r.Any()替代
带参数的路由怎么写、怎么取值
路由参数(path parameter)写在路径里,用 :name 表示;查询参数(query parameter)在 ? 后面,用 c.Query() 或 c.DefaultQuery() 获取。
-
/user/:id→ 取值用c.Param("id"),注意Param不校验类型,返回string,需手动转int等 -
/search?keyword=go&page=1→c.Query("page")返回空字符串若参数缺失;c.DefaultQuery("page", "1")可设默认值 - 混合使用时,
Param和Query互不影响,但路径参数优先级高于同名 query 参数(比如/user/123?page=123中两个123是独立的) - 别把业务关键参数全塞 query —— 它会暴露在日志、代理、浏览器地址栏里;ID 类资源标识建议走 path
路由分组怎么组织、中间件怎么挂载
r.Group() 返回新路由实例,所有子路由共享前缀和中间件,是模块化管理的核心手段。
当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。
- 版本控制常见写法:
v1 := r.Group("/api/v1"),然后v1.GET("/users", handler) - 中间件可传入
Group()第二个参数,如r.Group("/admin", authMiddleware, loggerMiddleware) - 分组嵌套合法:
adminV1 := r.Group("/admin").Group("/v1"),但路径会拼成/admin/v1/xxx,注意斜杠冗余 - 空字符串分组
r.Group("")是合法的,等价于根路由,但容易引发歧义,建议显式写r.Group("/")或直接用根引擎
为什么有些路由 404 或自动跳转了
Gin 默认开启 RedirectTrailingSlash 和 RedirectFixedPath,这是 httprouter 底层行为,不是 bug。
立即学习“go语言免费学习笔记(深入)”;
- 访问
/user但只注册了/user/→ 自动 301 重定向到带斜杠版本 - 访问
/User但注册的是/user→ 若开启RedirectFixedPath,会尝试大小写修正并重定向 - 这些重定向对 API 接口不友好(尤其是移动端或 CLI 工具),应在初始化后关闭:
r := gin.New(); r.RedirectTrailingSlash = false; r.RedirectFixedPath = false - 关闭后,
/user和/user/就是两个完全不同的路由,需按需显式注册
c.Param() 在未匹配路由时返回空字符串而非报错,这种“静默失败”最容易在测试遗漏时拖到上线才发现。


















