gin HTTP路由分析

gin 添加路由处理逻辑

TODO

gin HTTP请求处理调用链

ServeHTTP
  -> handleHTTPRequest
    -> (*node).getValue
    -> (*Context).Next

handleHTTPRequest

https://github.com/gin-gonic/gin/blob/9914178584e42458ff7d23891463a880f58c9d86/gin.go#L690

  1. engine.trees获取匹配HTTP Method的*node根节点。
    1.1 遍历路由树(类似于radixTree), 根据最长匹配不断deep, 知道确认叶子节点, 中间如果遇到节点类型为param, 则提取路径值作为value。如果路径是*, 则会把当前路径都作为value。
    例如: /test/:name路由, 中间会有个子节点的类型为param, path为:name, 如果接收到/test/client, 则会保存name -> client的映射作为value。
  2. 如果上述没有匹配到, 且engine.HandleMethodNotAllowed为true, 则会重新查找一遍HTTP Method不匹配, 但是路径匹配的节点, 如果匹配到, 则会响应HTTP Status Code: 405。
  3. 如果上述都没有匹配到, 则会调用engine.allNoRoute做一次处理, 如果没有通过engine.NoRoute()函数注册过, 则会响应HTTP Status Code: 404。
posted @ 2026-01-02 18:48  yghr  阅读(5)  评论(0)    收藏  举报