zo使用beego分清楚版本,beego的壹版本和v2版本的包发生了变化,使用方式也有新的改变,主要是从beego1.3.0后引入了注解路由的方式,为了简化rounter中的书写方式,如只需要在rounter中通过 beego.NSInclude()的方式把注解的路由hander加入进来,真正的匹配方式交给hander的注解内容去完成,通过URLMapping()优化匹配提高了执行效率。
beego.NSNamespace("/product",
beego.NSInclude(
&admin.ProductController{},
),
),
type ProductController struct {
BaseController
}
// URLMapping ...
func (c *ProductController) URLMapping() {
c.Mapping("AddProduct", c.AddProduct)
c.Mapping("UpdateProduct", c.UpdateProduct)
c.Mapping("GetProductParameters", c.GetProductParameters)
c.Mapping("GetProductAttributes", c.GetProductAttributes)
c.Mapping("GetProductSpecifications", c.GetProductSpecifications)
c.Mapping("GetOneProduct", c.GetOneProduct)
c.Mapping("GetProductCount", c.GetProductCount)
c.Mapping("GetAllProduct", c.GetAllProduct)
}
// @Title Add Product
// @Description create Product
// @Success 201
// @Failure 500
// @router /add [post]
func (c *ProductController) AddProduct(){}
通过注解路由书写的方式,bee会生成动态路由,访问都是基于生成的路由方式访问,这些生成的本质和自己在rounter书写的一样,后者是生成的简化了开发。注解路由的书写方式如下
adminRoute := beego.NewNamespace("/api/admin",
// 支持注解路由
beego.NSNamespace("/attribute",
beego.NSInclude(
&admin.AttributeController{},
),
),
/**
* 注册路由
*/
beego.AddNamespace(adminRoute)
可以通过命名空间来控制访问路径,使用beego.NSInclude()引入handler的注解路由.如果自己手动方式添加路由就需要删除beego.NSInclude()用beego.NSRouter()代替,handler里的每一个方法都要beego.NSRouter()注册来代替注解的功能。
如果当前使用的bee工具是2.0版本并且使用了注解路由的方式,使用beev2.1.0 generate routers生成了注解路由配置那么可以将当前的rounter删除,而生成的路由文件的使用默认是beego2.0版本导入的依赖是
beego "github.com/beego/beego/v2/server/web"
"github.com/beego/beego/v2/server/web/context/param"
我们要想使用beego的版本的注解路由可以将这个包换成指定beego1.0版本
"github.com/astaxie/beego"
"github.com/astaxie/beego/context/param"
如果不改会报错,使用的版本冲突问题,所以要手动替换beego2.0默认的包,生成的路由生效后配合之前的路由的访问路径加生成的注解的访问方法规则最终路由到目标方法上,所以原有的rounter的访问路径控制依然有效,用于定位到controller,对于执行哪一个方法则由注解路由生成,这连个配合使用。
生成后的格式和访问路由的方式如下:
beego.GlobalControllerRouter["go-shop-b2c/controllers/admin:AdminController"] = append(beego.GlobalControllerRouter["go-shop-b2c/controllers/admin:AdminController"],
beego.ControllerComments{
Method: "GetAllAdmin",
Router: `/`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
beego.NSInclude(
&admin.AdminController{},
),
如上在rounter中使用beego.NSInclude定位到了处理器,处理器中注解规定了访问方法的方式,这些方式通过beev2.1.0 generate routers命令获取handler器上注解信息和 URLMapping()方法映射生成最终路由规则,如果生成的路由格则访问路径有问题可以修改生成的路由路径配合原有控制路径发生共同作用。
总结:使用bee高版本生成的注解路由默认导入的包依赖是v2,需要手动删除高依赖版本的beego加入自己当前版本,还有在路由中导包时自动导入会导入错误的包如github.com/beego/beego实际路由用的包github.com/astaxie/beego而报错。