gorilla mux子路由器是否会继承父路由器通过Use()添加的中间件?
问题
使用gorilla/mux路由库时,父路由器通过Use()方法挂载的中间件,子路由器是否会继承使用?
此前检索相关问题未找到清晰明确的答案,官方文档也没有对应说明,以下方代码场景为例:请求匹配子路由的路径时,是否会触发父路由挂载的logMiddleware?
mainRouter := mux.NewRouter() mainRouter.Use(logMiddleware) subRouter := mainRouter.PathPrefix("/users/").Subrouter() subRouter.Handle("/john", johnHandler())
注:上述代码实际匹配的请求路径为
/users/john,而非根路径下的/john,子路由的路径会拼接在父路由的路径前缀之后。
验证结论
会触发。
- 父路由通过
Use()方法注册的中间件,默认对该父路由下所有子路由生效,子路由会自动继承父级挂载的所有中间件,不需要重复调用Use()注册。 - 上述示例中,向
/users/john发起请求时,请求会先经过logMiddleware处理,之后才会进入johnHandler执行业务逻辑。 - 如果需要让特定子路由跳过父级中间件,需要自行在中间件内增加路由匹配判断逻辑,
gorilla/mux本身没有提供直接屏蔽继承中间件的原生配置。
内容的提问来源于stack exchange,提问作者Damien
相关产品推荐
相关产品推荐

