https://beego.vip/docs/mvc/controller/router.md
main 函数是入口函数,但是我们知道 Go 的执行过程是如下图所示的方式:
image.png
执行顺序:深度优先

正则路由

  1. this.Ctx.Input.Param(":id")
  2. this.Ctx.Input.Param(":username")
  3. this.Ctx.Input.Param(":splat")
  4. this.Ctx.Input.Param(":path")
  5. this.Ctx.Input.Param(":ext")

自定义方法及 RESTful 规则

请求的 method 和函数名一致,例如 GET 请求执行 Get 函数,POST 请求执行 Post 函数
如果用户期望自定义函数名,那么可以使用如下方式:

  1. web.Router("/",&IndexController{},"*:Index")

使用第三个参数,第三个参数就是用来设置对应 method 到函数名,定义如下

  • *表示任意的 method 都执行该函数
  • 使用 httpmethod:funcname 格式来展示
  • 多个不同的格式使用 ; 分割
  • 多个 method 对应同一个 funcname,method 之间通过 , 来分割

以下是一个 RESTful 的设计示例:

  1. web.Router("/api/food",&RestController{},"get:ListFood")
  2. web.Router("/api/food",&RestController{},"post:CreateFood")
  3. web.Router("/api/food",&RestController{},"put:UpdateFood")
  4. web.Router("/api/food",&RestController{},"delete:DeleteFood")

以下是多个 HTTP Method 指向同一个函数的示例:

  1. web.Router("/api",&RestController{},"get,post:ApiFunc")

以下是不同的 method 对应不同的函数,通过 ; 进行分割的示例:

  1. web.Router("/api/food",&RestController{},"get:ListFood;post:CreateFood;put:UpdateFood;delete:DeleteFood")

可用的 HTTP Method:

  • *: 包含以下所有的函数
  • get: GET 请求
  • post: POST 请求
  • put: PUT 请求
  • delete: DELETE 请求
  • patch: PATCH 请求
  • options: OPTIONS 请求
  • head: HEAD 请求

如果同时存在 * 和对应的 HTTP Method,那么优先执行 HTTP Method 的方法,例如同时注册了如下所示的路由:

  1. web.Router("/simple",&SimpleController{},"*:AllFunc;post:PostFunc")

那么执行 POST 请求的时候,执行 PostFunc 而不执行 AllFunc。
自定义函数的路由默认不支持 RESTful 的方法,也就是如果你设置了 web.Router(“/api”,&RestController{},”post:ApiFunc”) 这样的路由,如果请求的方法是 POST,那么不会默认去执行 Post 函数。