Go語言的Web架構

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

我去年開始研究Go語言,不知不覺快有一年了。以前我研究php和nodejs,都是弱類型的解釋性語言。想找一個編譯型的強型別語言繼續學習,就選中了新奇的Go語言。我只關注Web方面的應用,看了很多有興趣的開源的Go Web架構,隨便吐槽一下。

revel

revel 是最早的Go語言Web架構,借鑒的java和scala語言的 play架構 的很多想法。最早我看play 1.x時期在java社區似乎帶來一股全新的風氣,感覺是很有意思的事情。後來 play 2.x 轉投scala陣營,把java開發人員帶入深淵,被很多人無情的吐槽。如今,play社區還是不溫不火的,國內應用也小眾。

revel 這玩意兒帶有和play一樣的毛病,捨棄了原有的標準完全自己來。revel 完全不理 Go標準庫的一套,全部是自己的概念;類似的play捨棄了servlet 3標準。結果就是,我看了半天,還是不曉得該怎麼用。內建的概念太多,是個障礙啊!

當然,revel 的案例還是有的,比如 山坡網。他的作者的部落格也有很多關於revel的教程文章。

beego

beego 是國內最火熱的架構吧。當初藉著給他貢獻一些代碼注釋,通讀了整個的源碼。要按我的想法,這是一個比較中型的架構。除了基礎的MVC結構外,還帶有Cache,ORM,Session等多個庫的支援。像這樣面面俱到,對開發人員而言是好事。

但是面面俱到的問題是,能不能用別人的Session或者Cache呢?已經有使用xorm這個ORM庫代替beego內建的ORM的案例。不過總會有一種錯覺:“它提供了就用它自己的吧,別的萬一出問題還不會搞”,額呵呵呵。

beego 用的人很多,文檔也很齊全(更新不太及時),社區和Q群也很活躍。因而,選擇beego是不錯的。

martini

martini 是新銳的架構,概念非常不錯。不過,martini只是一個微型架構,只帶有簡單的核心,路由功能和依賴注入容器inject。因此很多東西需要自己寫,比如view,session等。而且目前也沒有看到比較好的與資料庫結合使用的例子。學習起來有一點困難。

換個角度說,martini營造的不是一個大而全的架構,而是一種組件生態martini-contrib。這個就是nodejs中的expressjs在做的事情。而且他的DI實現,讓第三方庫很容易改造為martini規範的中介軟體。倘若組件多起來,相信會有很大前途的。

不過,由於依賴注入的實現依賴reflect反射,而Go語言的反射庫效率很差。過多的中介軟體肯定會拖慢整體的速度。這就只能看Go語言以後的發展咯。

總結一下

主要的架構現在是這三個。其實還有很多挺好玩的實現,比如類似java struct的 xweb,類似 python flask 的 entropy 和 ASP.NET MVC 的 goku。 多去看看,肯定是有好處的。

但是,更重要的,熟悉標準庫 !!!!!!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.