https://beego.vip/docs/mvc/controller/router.md
main 函数是入口函数,但是我们知道 Go 的执行过程是如下图所示的方式:
执行顺序:深度优先
正则路由
this.Ctx.Input.Param(":id")
this.Ctx.Input.Param(":username")
this.Ctx.Input.Param(":splat")
this.Ctx.Input.Param(":path")
this.Ctx.Input.Param(":ext")
自定义方法及 RESTful 规则
请求的 method 和函数名一致,例如 GET 请求执行 Get 函数,POST 请求执行 Post 函数
如果用户期望自定义函数名,那么可以使用如下方式:
web.Router("/",&IndexController{},"*:Index")
使用第三个参数,第三个参数就是用来设置对应 method 到函数名,定义如下
- *表示任意的 method 都执行该函数
- 使用 httpmethod:funcname 格式来展示
- 多个不同的格式使用 ; 分割
- 多个 method 对应同一个 funcname,method 之间通过 , 来分割
以下是一个 RESTful 的设计示例:
web.Router("/api/food",&RestController{},"get:ListFood")
web.Router("/api/food",&RestController{},"post:CreateFood")
web.Router("/api/food",&RestController{},"put:UpdateFood")
web.Router("/api/food",&RestController{},"delete:DeleteFood")
以下是多个 HTTP Method 指向同一个函数的示例:
web.Router("/api",&RestController{},"get,post:ApiFunc")
以下是不同的 method 对应不同的函数,通过 ; 进行分割的示例:
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 的方法,例如同时注册了如下所示的路由:
web.Router("/simple",&SimpleController{},"*:AllFunc;post:PostFunc")
那么执行 POST 请求的时候,执行 PostFunc 而不执行 AllFunc。
自定义函数的路由默认不支持 RESTful 的方法,也就是如果你设置了 web.Router(“/api”,&RestController{},”post:ApiFunc”) 这样的路由,如果请求的方法是 POST,那么不会默认去执行 Post 函数。