【GoWeb开发实战】Beego的路由控制
Beego的路由控制
二、路由控制
web框架中,路由是重要的一環(huán),對(duì)于beego的路由配置如何?
2.1 默認(rèn)路由
讓我們從入口文件main.go先分析起來吧:
package mainimport (_ "beegoDemo/routers""github.com/astaxie/beego" )func main() {beego.Run() }我們看到 main 函數(shù)是入口函數(shù),但是我們知道 Go 的執(zhí)行過程是如下圖所示的方式:
?
?這里我們就看到了我們引入了一個(gè)包?_ "beegoDemo/routers",這個(gè)包只引入執(zhí)行了里面的 init 函數(shù),那么讓我們看看這個(gè)里面做了什么事情:
package routersimport ("beegoDemo/controllers""github.com/astaxie/beego" )func init() {beego.Router("/", &controllers.MainController{}) }路由包里面我們看到執(zhí)行了路由注冊(cè)?beego.Router, 這個(gè)函數(shù)的功能是映射 URL 到 controller,第一個(gè)參數(shù)是 URL (用戶請(qǐng)求的地址),這里我們注冊(cè)的是?/,也就是我們?cè)L問的不帶任何參數(shù)的 URL,第二個(gè)參數(shù)是對(duì)應(yīng)的 Controller,也就是我們即將把請(qǐng)求分發(fā)到那個(gè)控制器來執(zhí)行相應(yīng)的邏輯,我們可以執(zhí)行類似的方式注冊(cè)如下路由:
beego.Router("/user", &controllers.UserController{})看一下這個(gè)Router?的源碼:
func Router(rootpath string, c ControllerInterface, mappingMethods ...string) *App {BeeApp.Handlers.Add(rootpath, c, mappingMethods...) return BeeApp }我們beego的路由控制在router/router.go這個(gè)代碼文件控制的,我們?cè)趇nit這個(gè)函數(shù)根據(jù)自己需求來更改路由規(guī)則了。
2.2 基礎(chǔ)路由
beego 存在三種方式的路由:固定路由、正則路由、自動(dòng)路由。
從 beego 1.2 版本開始支持了基本的 RESTful 函數(shù)式路由,應(yīng)用中的大多數(shù)路由都會(huì)定義在?routers/router.go?文件中。最簡單的 beego 路由由 URI 和閉包函數(shù)組成。
2.2.1 基本 GET 路由
beego.Get("/",func(ctx *context.Context){ctx.Output.Body([]byte("hello world")) })2.2.2 基本 POST 路由
beego.Post("/alice",func(ctx *context.Context){ctx.Output.Body([]byte("wangergou")) })2.2.3 注冊(cè)一個(gè)可以響應(yīng)任何 HTTP 的路由
beego.Any("/foo",func(ctx *context.Context){ctx.Output.Body([]byte("ruby")) })2.2.4 所有的支持的基礎(chǔ)函數(shù)如下所示
beego.Get(router, beego.FilterFunc) beego.Post(router, beego.FilterFunc) beego.Put(router, beego.FilterFunc) beego.Patch(router, beego.FilterFunc) beego.Head(router, beego.FilterFunc) beego.Options(router, beego.FilterFunc) beego.Delete(router, beego.FilterFunc) beego.Any(router, beego.FilterFunc)2.2.5 支持自定義的 handler 實(shí)現(xiàn)
有些時(shí)候我們已經(jīng)實(shí)現(xiàn)了一些 rpc 的應(yīng)用,但是想要集成到 beego 中,或者其他的 httpserver 應(yīng)用,集成到 beego 中來。現(xiàn)在可以很方便的集成:
s := rpc.NewServer() s.RegisterCodec(json.NewCodec(), "application/json") s.RegisterService(new(HelloService), "") beego.Handler("/rpc", s)beego.Handler(router, http.Handler)?這個(gè)函數(shù)是關(guān)鍵,第一個(gè)參數(shù)表示路由 URI,第二個(gè)就是你自己實(shí)現(xiàn)的?http.Handler,注冊(cè)之后就會(huì)把所有 rpc 作為前綴的請(qǐng)求分發(fā)到?http.Handler?中進(jìn)行處理。
這個(gè)函數(shù)其實(shí)還有第三個(gè)參數(shù)就是是否是前綴匹配,默認(rèn)是 false,如果設(shè)置了 true,那么就會(huì)在路由匹配的時(shí)候前綴匹配,即?/rpc/user?這樣的也會(huì)匹配去運(yùn)行。
轉(zhuǎn)載于:https://www.cnblogs.com/Paul-watermelon/articles/11031703.html
總結(jié)
以上是生活随笔為你收集整理的【GoWeb开发实战】Beego的路由控制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分别安装搭建lamp服务环境
- 下一篇: day29 socket编程TCP和UD