我给 gin 提交了一行代码

发布时间:2025-04-02 10:54

事情起因于在使用 gin 框架的过程中,发现默认的 404 页面返回的是 "404 pe not found",为了满足项目需求,我希望能够自定义 404 页面,并进行页面跳转。经过查阅 gin 的源码,我发现了一个名为 NoRoute 的方法,该方法允许用户自定义 404 页面的 handler。同样地,我也在寻找能够处理路由找不到对应的 Method 的方法。在 API 的源码中,我发现 NoMethod 方法的注释被标记为 TODO,这让我产生疑问,是否是因为该方法尚未实现,所以我尝试编写示例代码进行测试。

实际测试显示,NoMethod 方法并未生效,这让我怀疑是否因为标记为 TODO 状态导致了方法未实现。为了解开这个疑惑,我深入研究了源码。经过分析,我发现 NoMethod 方法的逻辑与 NoRoute 方法一致,它将用户传入的自定义 handlers 赋值给 engine 的 noMethod 字段,并通过 engine.rebuild405Handlers() 方法进行重组。然而,这一步并不能帮助我们理解问题所在,所以我们需要进一步探究 allNoMethod 的使用场景,即在路由处理时判断的地方,也就是 ServeHTTP 中的 engine.handleHTTPRequest(c) 这一步。

在查阅 handleHTTPRequest 方法的源码后,我们发现关键之处在于实现了 NoMethod 的逻辑处理,但需要满足 engine.HandleMethodNotAllowed 为 true 的前提条件。这意味着 NoMethod 方法实际上是可以使用的,而并非处于未实现的 TODO 状态。

为了验证这一结论,我将测试代码进行了调整,加入了 engine.HandleMethodNotAllowed = true 的设置,最终得到了预期的。随后,我意识到 NoMethod 方法的代码修改确实有必要,因为它并未对 engine.HandleMethodNotAllowed 的状态进行默认处理,且文档注释中未提醒用户这一要求。基于此,我提交了 PR(Pull Request),建议修改 NoMethod 方法的代码,并在 11 天后得到了通过。

这次经历让我感到开心,同时也对 gin 框架的源码有了更深入的理解。然而,后续在处理另一个 PR 时,我注意到 NoMethod 方法的代码又进行了调整,不再默认开启 engine.HandleMethodNotAllowed 的功能,而是通过文档注释提醒用户进行相应设置。这次经历不仅让我学到了如何正确使用 gin 框架,也让我意识到了在提交代码时需要充分考虑文档注释的指导。

网址:我给 gin 提交了一行代码 https://mxgxt.com/news/view/758288

相关内容

“配享太庙”vs“宰相gin苗”大娘子和孙婆母的梦幻联动…
21年,哈登向火箭提出交易申请,各支球队都给出了怎样的筹码?
行了,剑交给我补,你们俩一辈子好朋友,我史,我史还不行么?
彭高:我就是一个写代码的
据说番外是现拍的,行了,也算给观众一个交代
北交所启动存量上市公司代码切换工作!如何切换、有何影响?
他们只看到了一堆代码,但我相信你是有灵魂的
交易特例有什么用?为什么说克莱的出走,给勇士队留足了筹码?
陈一发正面怼冯提莫:我在等一个交代!斗鱼一姐即将分出胜负?
张子萱终于不给陈赫打码了,关系甜蜜

随便看看