<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] ## 1.注冊控制器風格的路由 controller里處理http請求的方法必須是公共方法,**首字母大寫**、**沒有參數**、**沒有返回值**。 方法接收器可以不是指針,并不強制。 ~~~ package main import "github.com/beego/beego/v2/server/web" type UserController struct { web.Controller } type IndexController struct { web.Controller } func (i *IndexController) Show() { i.Ctx.WriteString("this is index website") } func (u *UserController) HelloWorld() { u.Ctx.WriteString("hello, world") } func main() { web.AutoRouter(&UserController{}) web.AutoRouter(&IndexController{}) web.Run() } ~~~ ### Controller的名字 以上定義了UserController 和 IndexController,那它們的名字分別是User和Index。 大小寫不敏感的時候,userController和 indexController也是合法的名字。 ### AutoRouter `AutoRouter`解析出來的路由規則由`RouterCaseSensitive`的值,`Controller`的名字和方法名字共同決定。 UserController 名字是User,方法是HelloWorld;如果`RouterCaseSensitive`為`true`, 那么`AutoRouter`會注冊兩個路由,`/user/helloworld/*`,`/User/HelloWorld/*`; 否則會注冊一個路由,`/user/helloworld/*`;`RouterCaseSensitive`為Config結構體bool類型的字段。 ### AutoPrefix 使用`AutoPrefix`的時候,注冊的路由符合`prefix/controllerName/methodName`這種樣式。 ~~~ package main import "github.com/beego/beego/v2/server/web" type IndexController struct { web.Controller } func (i *IndexController) Show() { i.Ctx.WriteString("this is index website") } func main() { index := &IndexController{} web.AutoPrefix("api", index ) //http://localhost:8080/api/index/show web.Run() } ~~~ ## 2.注冊函數式風格路由注冊 ~~~ func main() { web.Get("/hello", func(ctx *context.Context) { ctx.WriteString("hello, world") }) web.Run() } ~~~ ## 3.Namespace 在注冊路由的時候,需要按照一定的規律組織。 舉例說明: * 整個應用分成兩塊,一個對安卓提供的API,一個對IOS,就劃分成兩個命名空間。 * 版本的劃分,v1、v2、v3。 **代碼示例:** ~~~ package main import ( "github.com/beego/beego/v2/server/web" "github.com/beego/beego/v2/server/web/context" ) type MainController struct { web.Controller } func (mc *MainController) Home() { mc.Ctx.WriteString("this is home") } type UserController struct { web.Controller } func (uc *UserController) Get() { uc.Ctx.WriteString("get user") } func Health(ctx *context.Context) { ctx.WriteString("health") } func main() { uc := &UserController{} ns := web.NewNamespace("/v1", web.NSCtrlGet("/home", (*MainController).Home), web.NSRouter("/user", uc), web.NSGet("/health", Health), ) web.AddNamespace(ns) web.Run() } ~~~ ### namespace的嵌套 ~~~ func main() { uc := &UserController{} // 初始化 namespace ns := web.NewNamespace("/v1", web.NSCtrlGet("/home", (*MainController).Home), web.NSRouter("/user", uc), web.NSGet("/health", Health), // 嵌套 namespace web.NSNamespace("/admin", web.NSRouter("/user", uc), ), ) //注冊 namespace web.AddNamespace(ns) web.Run() } ~~~ ### namespace的條件執行 Beego的namespace提供了一種條件判斷機制,只有符合條件的情況下,該namespace下的路由才會被執行。 ~~~ func main() { uc := &UserController{} ns := web.NewNamespace("/v1", web.NSCond(func(b *context.Context) bool { return b.Request.Header["x-trace-id"][0] != "" }), web.NSCtrlGet("/home", (*MainController).Home), web.NSRouter("/user", uc), web.NSGet("/health", Health), ) web.AddNamespace(ns) web.Run() } ~~~ 建議實現一個`filter`,代碼理解性更高;該方法未來將移除。 ### Filter ~~~ func main() { uc := &UserController{} ns := web.NewNamespace("/v1", web.NSCond(func(b *context.Context) bool { return b.Request.Header["x-trace-id"][0] != "" }), web.NSBefore(func(ctx *context.Context) { fmt.Println("before filter") }), web.NSAfter(func(ctx *context.Context) { fmt.Println("after filter") }), web.NSCtrlGet("/home", (*MainController).Home), web.NSRouter("/user", uc), web.NSGet("/health", Health), web.NSNamespace("/admin", web.NSRouter("/user", uc), ), ) ns.Filter("before", func(ctx *context.Context) { fmt.Println("this is filter for health") }) web.AddNamespace(ns) web.Run() } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看