久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    對 5 個 Go Web 框架的調(diào)查

     一本正經(jīng)地胡鬧 2021-12-03

    2014

    在 Go 中構(gòu)建套接字服務(wù)器幾年后,我突然需要為 Javascript 和 Objective-C 客戶端構(gòu)建一些基于 HTTP 的 REST API。擁有 Rails 背景,我對通用 MVC 框架抱有很高的期望。然而,像 Ruby 中的 Sinatra 這樣的框架在簡單 REST 端點(diǎn)的簡單性之間取得了很好的平衡。為此我選擇繼續(xù)使用 Go,因?yàn)樗男阅芎挽o態(tài)類型,我認(rèn)為在不需要在傳統(tǒng) Web 應(yīng)用程序樣式開發(fā)中進(jìn)行大量模板和表單的項(xiàng)目中會長期勝出。

    比戈

    Beego看起來是一個功能齊全的 MVC 框架,可能與 Rails 處于同一級別。它不會試圖變小。它有自己的日志庫、ORM 和 Web 框架。

    社區(qū):

    Beego社區(qū)相當(dāng)大。然而,使用它的大多數(shù)公司似乎都是中國人,所以這個社區(qū)肯定存在語言障礙。由于大型中文站點(diǎn)使用該框架,因此它可能可以擴(kuò)展到大量流量。

    最大的特點(diǎn):

    由于這是一個成熟的 MVC 框架,您不必在網(wǎng)上搜索大量庫。很多問題馬上就消失了,例如要使用什么日志框架以及如何構(gòu)建應(yīng)用程序。這些功能可以在新項(xiàng)目開始時節(jié)省大量時間。

    馬提尼

    Martini受 Sinatra 的啟發(fā),具有非常輕量級框架的感覺。它處理基本的事情,比如路由、異常處理和做中間件的常用方法。最初在 Go 社區(qū)中有一些強(qiáng)烈反對,因?yàn)樗泻芏喾瓷浼夹g(shù)來清除路由中的 API 結(jié)構(gòu)。它可以做很酷的事情,比如根據(jù)類型將不同的數(shù)據(jù)集動態(tài)注入到處理程序中(請參閱最佳功能示例)。這種在 Ruby 框架中很常見的“魔法”在 Go 社區(qū)中引起了很大的轟動。以至于作者正在研究一個更簡單的框架,稱為Negroni然而,在我看來,它并沒有像馬提尼那樣提供那么多的價值。

    社區(qū):

    盡管是一個小社區(qū),但它似乎仍然非常活躍,大約有 20 個左右的活躍插件,我也有一個可以集成到 GetSentry源中鑒于框架的口頭禪是小,所以沒有那么多需要添加的東西是有道理的。

    最大的特點(diǎn):

    由于框架使用反射,它可以動態(tài)地將數(shù)據(jù)插入處理函數(shù)中,根據(jù)您的需要,請參見下面的示例。您甚至可以動態(tài)添加新服務(wù)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    m.Get("/", func(res http.ResponseWriter, req *http.Request) { // res and req are injected by Martini
      res.WriteHeader(200) // HTTP 200
    })
    m.Get("/", func() {
      // show something
    })
    m.Get("/", func(c *Context, r render.Render) {
      // show something
    })

    大猩猩

    Gorilla可能是最大和運(yùn)行時間最長的 Gi Web 框架,它是一個模塊化框架,可以為用戶提供盡可能多或盡可能少的資源。例如,在一個項(xiàng)目中,我們只是將 Sessions 包取出并重新用于 Auth。我認(rèn)為 Gorilla 很好,因?yàn)楹芏嘟M件都可以通過直接net/http重用

    社區(qū):

    Gorilla 可能擁有所有框架中最大的英語社區(qū)。它顯示了 GitHub 上可用的博客文章和中間件的剪切量。

    最大的特點(diǎn):

    我認(rèn)為最近有很多關(guān)于使用 Web 套接字動態(tài)更新Meteor.js 等框架中的應(yīng)用程序的炒作Gorilla 具有開箱即用的 Web 套接字,因此您可以將與 Web 套接字完全相同的代碼連接到 REST 端點(diǎn),而無需使用像 Pusher 這樣的第三方服務(wù)。

    圍棋

    我真的很想至少簡要地談?wù)?/font>這個框架我認(rèn)為 net/http 的最大問題之一是無法將上下文傳遞給您的處理程序鏈。因此,您無法在中間件和處理程序之間輕松共享數(shù)據(jù)或事務(wù)。這個框架的目標(biāo)是超級最小化并解決這個問題。讓我給你看幾個簡單的例子

    讓我們舉一個典型的例子,其中一些中間件授權(quán)用戶,然后將用戶對象放入會話中。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    router := web.New(YourContext{})
    router.Middleware((*YourContext).UserAuthRequired)
    router.Put("/users/:id", (*YourContext).UsersUpdate)
    func (c *YourContext) UserAuthRequired(rw web.ResponseWriter, r *web.Request, next web.NextMiddlewareFunc) {
        //Auth the user and put the data into the context
        user := userFromSession(r)  // Pretend like this is defined. It reads a session cookie and returns a *User or nil.
        if user != nil {
            c.User = user
            next(rw, r)
        }
    }
    func (c *YourContext) Root(rw web.ResponseWriter, req *web.Request) {
        if c.User != nil {
            fmt.Fprint(rw, "Hello,", c.User.Name)
        } else {
            fmt.Fprint(rw, "Hello, anonymous person")
        }
    }

    網(wǎng)絡(luò)/HTTP

    如果您閱讀 Go 郵件列表,您可能會被告知這是您需要的唯一框架。在某些方面它是真實(shí)的。我們僅使用 net/http 構(gòu)建了一個完整的 XMPP 服務(wù)器,并且運(yùn)行良好。然而,復(fù)雜的 Web 應(yīng)用程序往往需要中間件。有一些有趣的項(xiàng)目,例如interpose,它允許您將來自其他 GO Web 框架的中間件與標(biāo)準(zhǔn) net/http 混合和匹配。

    社區(qū)

    社區(qū)顯然非常大,因?yàn)橛脩艨梢灾赜脕碜栽S多其他項(xiàng)目的位。然而,它的接口非常有限,并且并沒有真正定義任何擴(kuò)展中間件的標(biāo)準(zhǔn)方式。開箱即用的路由非常薄弱,因此您通常使用它的框架。

    結(jié)論

    我們嘗試了幾個這樣的框架來感受一下。我們將 Martini 用于我們的 REST API。雖然我們喜歡它,但我認(rèn)為將來我會嘗試使用 GoCraft,因?yàn)樗p量級,但解決了與 Martini 相同的上下文問題。也許我們會采用一些 Martini 中間件作為實(shí)驗(yàn)。最初我們嘗試將 Gorilla 用于我們的管理系統(tǒng),我認(rèn)為這最終是一個大錯誤。它確實(shí)缺乏 RAILS 是多么固執(zhí)己見,以及許多用于制作真正基本的千篇一律的網(wǎng)絡(luò)應(yīng)用程序的小功能。對于直接基于傳統(tǒng)形式的 CRUD 應(yīng)用程序,我認(rèn)為我們將來會嚴(yán)重傾向于 Beego,因?yàn)樗娴母杏X像是一個完整的 MVC 功能集。

    Matthew是一名黑客,他經(jīng)常在紐約和曼谷之間奔波。他為湯森路透編寫了大型 XMPP 服務(wù)器,將 Bloomberg.com 移植到 Ruby on Rails,甚至為 Gucci 從事電子商務(wù)工作。在他的許多合同之間,他經(jīng)營著一家名為 Langfight 的新創(chuàng)業(yè)公司。他經(jīng)營著曼谷 GO Lang Meetup,并發(fā)表了一篇名為 DistributedAgile 的關(guān)于外包的有趣方面的博客。博客上有一本關(guān)于外包的免費(fèi)電子書。你可以在推特上關(guān)注他@kanwisher

    通過Flickr Creative Commons 提供的 特色圖片

      本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
      轉(zhuǎn)藏 分享 獻(xiàn)花(0

      0條評論

      發(fā)表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 亚洲欧洲专线一区| 亚洲精品成人久久久| 欧美大屁股流白浆XXXX| 7777精品久久久大香线蕉| 久久精品国产99国产精品澳门| 成人免费AA片在线观看| 日本边添边摸边做边爱的视频| 开心一区二区三区激情| 欧美日韩一区二区综合| 精品国产一区av天美传媒| 日韩AV高清在线看片| 国产成人毛片无码视频软件| 欧美怡春院一区二区三区| 日韩日韩日韩日韩日韩| 国产AV老师黑色丝袜美腿| 国产精品毛片无码| 国产精品自在拍首页视频| 免费看国产美女裸体视频| 18级成人毛片免费观看| 免费无码又爽又刺激软件下载| 中文字幕亚洲无线码A| 成人免费A级毛片无码网站入口| 午夜性爽视频男人的天堂| 性男女做视频观看网站| 99久久国产综合精品女图图等你| 成人国产精品中文字幕| 无码人妻久久一区二区三区APP| 久久99热只有频精品8| 久久精品人人做人人爽电影蜜月| 午夜福利在线观看6080| 欧美高清精品一区二区| 天天综合亚洲色在线精品| 蜜臀av久久国产午夜| 日本无遮挡真人祼交视频| 国产白嫩护士在线播放| 中文字幕国产原创国产| 波多野结衣一区二区三区AV高清| 成人午夜看黄在线尤物成人| 亚洲中文字幕国产精品| 国产真人无码作爱视频免费| 中文字幕理伦午夜福利片|