beego通过命名空间(ns)实现接口分组管理,支持基础分组、多级嵌套(如/v1/admin/user)、绑定过滤器(全局或单路由),并可在debug页面查看已注册的树形路由信息。

Beego框架中用命名空间实现接口分组管理,能清晰隔离买家、卖家、后台等不同角色的API路径,避免路由注册混乱和前缀重复手写。
基础命名空间分组
在 routers/router.go 文件的 init() 函数内,用 web.NS() 创建命名空间对象,再通过 .Router() 或 .AutoRouter() 注册子路由。
例如为买家接口统一加 /api/buyer 前缀:
web.NS("/api/buyer",
web.NSRouter("/order", &controllers.BuyerOrderController{}),
web.NSRouter("/cart", &controllers.BuyerCartController{}),
),
这一步必须放在 web.Router() 或 web.AutoRouter() 调用之前,否则命名空间不生效。
多级嵌套命名空间
当需要按版本+角色双重分组时(如 /v1/admin/user),可逐层嵌套 NS 对象:
第一步:创建 v1 版本空间
第二步:在 v1 内创建 admin 子空间
第三步:在 admin 内注册 UserController 路由
代码写法如下:
web.NS("/v1",
web.NS("/admin",
web.NSRouter("/user", &controllers.AdminUserController{}),
web.NSRouter("/log", &controllers.AdminLogController{}),
),
),
注意:嵌套层级没有硬性限制,但超过三层会显著增加维护成本,建议控制在两到三层以内。
命名空间绑定过滤器
方法一:对整个命名空间统一加权限校验
在 NS 定义中插入 .Filter("before", filter.CheckAdmin),该过滤器会在该空间下所有路由执行前触发。
方法二:只对某条子路由加特定过滤器
使用 NSRouter() 的变体 NSInclude() 配合自定义 FilterFunc:
web.NS("/api/v2",
web.NSInclude(&controllers.APIV2Controller{}),
web.NSFilter("before", filter.RequireToken),
),
【注意】 NSFilter 必须紧跟在 NSInclude 或 NSRouter 之后,且只能作用于当前 NS 块内定义的路由,无法穿透到子 NS 中。
查看已注册的命名空间路由
启动项目后,访问 http://127.0.0.1:8080/debug/stack 页面(需开启 beego.RunMode = "dev")。
在页面底部找到 "Registered Router Info" 区域,所有 NS 路由都会以树形结构展开显示,含完整路径、控制器、方法及绑定的 Filter。
这一步能快速验证嵌套是否生效、前缀是否拼接正确,避免手动调试时反复改代码重启。











