<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          「GoCN酷Go推薦」一款簡(jiǎn)潔的、極易擴(kuò)展且模塊化的Go Web框架Flamego

          共 7522字,需瀏覽 16分鐘

           ·

          2022-04-18 02:17

          安裝

          ?

          ?

          ?

          ?

          go get github.com/flamego/flamego

          開始使用

          ?

          ?

          ?

          ?

          package main

          import "github.com/flamego/flamego"

          func main(){
            f := flamego.Classic()
            f.Get("/"func() string {
              return "hello world"
            })
            f.Run(8000)
          }

          核心特性

          ?

          ?

          ?

          ?

          實(shí)例

          Flame實(shí)例實(shí)現(xiàn)了標(biāo)準(zhǔn)庫(kù)net/httphttp.Handler接口,所以可以被集成到任何接受http.Handler作為參數(shù)的地方

          flamego.New可以創(chuàng)建一個(gè)沒有注冊(cè)任何中間件的實(shí)例,并且任何包含flamego.Flame的類型都可以被視為一個(gè)Flame實(shí)例

          每個(gè)Flame實(shí)例都是獨(dú)立于其他Flame實(shí)例而存在的,不會(huì)互相影響

          func main() {
              f1 := flamego.New()
              f2 := flamego.New()
              f2.Use(flamego.Recovery())
          }

          處理器

          任何實(shí)現(xiàn)了flamego.Handler的函數(shù)/方法都可以被視為處理器,處理器用來執(zhí)行路由匹配后的動(dòng)作

          func main() {
            f := flamego.New()
            
            f.Get("/anonymous"func() string {
                return "Respond from an anonymous function"
            })
            
            f.Get("/declared", declared)
            
            t := &customType{}
            f.Get("/method", t.handler)
            
            f.Run()
          }

          func declared() string {
            return "Respond from a declared function"
          }

          type customType struct{}

          func (t *customType) handler() string {
            return "Respond from a method of a type"
          }

          中間件

          中間件是一種特殊的處理器,它們被設(shè)計(jì)為可復(fù)用的組件并允許用戶通過配置選項(xiàng)進(jìn)行自定義,中間件可以被用在任何接受flamego.Handler類型的地方,包括全局、組級(jí)或路由級(jí)。

          // 全局中間件會(huì)在其它所有中間件和處理器之前被調(diào)用
          f.Use(middleware1, middleware2, middleware3)

          // 組級(jí)中間件僅在組內(nèi)定義的路由被匹配時(shí)才被調(diào)用
          f.Group("/",
            func(){
              f.Get("/hello"func() { ... })
            },
            middleware4, middleware5, middleware6,
          )

          // 路由級(jí)中間件僅在所綁定的路由被匹配時(shí)才被調(diào)用
          f.Get("/hi", middleware7, middleware8, middleware9, func() { ... })

          自定義中間件,其實(shí)就是自定義處理器,不同的是可以使用flamego.Context的方法Next()暫停一個(gè)處理執(zhí)行


          func Middleware1(c flamego.Context){
            fmt.Println("starting the first handler")
            c.Next()
            fmt.Println("exiting the first handler")
          }

          func Middleware2(){
            fmt.Println("executing the second handler")
          }

          f := flamego.New()

          f.Use(Middleware1, Middleware2)

          f.Get("/"func(){
            fmt.Println("hello world")
          })

          f.Run()
            

          服務(wù)注入

          Flamego依賴注入思想主要體現(xiàn)在服務(wù)注入上,是整個(gè)框架的靈魂所在

          看一個(gè)服務(wù)注入的例子:

          l := log.New(os.Stdout, "[Flamego] "0)
          f := flamego.New()
          // 將服務(wù)注入到Flame實(shí)例
          f.Map(l)

          // 可以在任意處理器中使用
          f.Get("/"func(l *log.Logger){
            l.Println("hello world")
          })

          Flame內(nèi)置了很多服務(wù),比如flamego.Content請(qǐng)求上下文,flamego.Recovery()Panic恢復(fù),flamego.Static管理靜態(tài)資源,flamego.Renderer渲染內(nèi)容等等

          當(dāng)然可以自定義服務(wù),并且可以設(shè)置服務(wù)范圍,全局級(jí)別,組級(jí)別,路由級(jí)別,詳情可以查看文檔

          路由

          Flamego在路由系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)上花費(fèi)了大量精力,在確保易用性的同時(shí)保留了未來的可擴(kuò)展性。

            // 靜態(tài)路由
            f.Get("/user", ...)
            
            // 動(dòng)態(tài)路由
            f.Get("/posts/{year}-{month}-{day}.html", ...)
            
            // 正則表達(dá)式
            f.Get("/users/{name: /[a-zA-Z0-9]+/}", ...)
            
            // 通配符
            f.Get("/webhooks/{repo: **}/events", ...)
            
            // 路由組
            f.Group("/user"func() {
              f.Get("/info", ...)
              f.Group("/settings"func() {
                f.Get("", ...)
                f.Get("/account_security", ...)
              }, middleware3)
            }, middleware1, middleware2)
            
            // 可選路由
            f.Get("/user/?settings", ...)
            
            // 設(shè)置別名
            f.Get("/user/?settings", ...).Name("UserSettings")
            
            // 構(gòu)建URL
            c.URLPath("UserSettings")                         // => /user
            c.URLPath("UserSettings""withOptional""true"// => /user/settings
            c.URLPath("UsersName""name""joe")             // => /users/joe

          總結(jié)

          ?

          ?

          ?

          ?

          FlamegoMacaron框架的繼任者,Flamego具備了當(dāng)下 Go 語言生態(tài)中最強(qiáng)大的路由配置語法,通過依賴注入將服務(wù)模塊化,所以極易擴(kuò)展,同時(shí)也很輕量簡(jiǎn)潔,官方生態(tài)也很好,是一款十分優(yōu)秀的框架

          官方文檔:https://flamego.cn


          酷Go推薦》招募:


          各位Gopher同學(xué),最近我們社區(qū)打算推出一個(gè)類似GoCN每日新聞的新欄目《酷Go推薦》,主要是每周推薦一個(gè)庫(kù)或者好的項(xiàng)目,然后寫一點(diǎn)這個(gè)庫(kù)使用方法或者優(yōu)點(diǎn)之類的,這樣可以真正的幫助到大家能夠?qū)W習(xí)到

          新的庫(kù),并且知道怎么用。


          大概規(guī)則和每日新聞?lì)愃?,如果?bào)名人多的話每個(gè)人一個(gè)月輪到一次,歡迎大家報(bào)名!戳「閱讀原文」,即可報(bào)名


          想要了解更多 Golang 相關(guān)的內(nèi)容,歡迎掃描下方?? 關(guān)注 公眾號(hào),回復(fù)關(guān)鍵詞 [實(shí)戰(zhàn)群]  ,就有機(jī)會(huì)進(jìn)群和我們進(jìn)行交流~



          瀏覽 49
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  美女扒开粉嫩的尿囗给男生桶 | 欧美AAA | 丁香六月欧美 | 看免费操逼视频 | 电影91久久 |