Revel Web開(kāi)源框架
做網(wǎng)站、網(wǎng)站建設(shè)介紹好的網(wǎng)站是理念、設(shè)計(jì)和技術(shù)的結(jié)合。成都創(chuàng)新互聯(lián)擁有的網(wǎng)站設(shè)計(jì)理念、多方位的設(shè)計(jì)風(fēng)格、經(jīng)驗(yàn)豐富的設(shè)計(jì)團(tuán)隊(duì)。提供PC端+手機(jī)端網(wǎng)站建設(shè),用營(yíng)銷(xiāo)思維進(jìn)行網(wǎng)站設(shè)計(jì)、采用先進(jìn)技術(shù)開(kāi)源代碼、注重用戶體驗(yàn)與SEO基礎(chǔ),將技術(shù)與創(chuàng)意整合到網(wǎng)站之中,以契合客戶的方式做到創(chuàng)意性的視覺(jué)化效果。
個(gè)高效的Go語(yǔ)言Web開(kāi)發(fā)框架,?其思路完全來(lái)自 Java 的?Play Framework。
特點(diǎn)
熱編譯,簡(jiǎn)單可選,同步(每個(gè)請(qǐng)求都創(chuàng)建自己的goroutine來(lái)處理。
Go語(yǔ)言Web框架:beego
一個(gè)用Go開(kāi)發(fā)的應(yīng)用框架,思路來(lái)自于tornado,路由設(shè)計(jì)來(lái)源于sinatra。
支持特性
MVC;
REST;
智能路由;
日志調(diào)試;
配置管理;
模板自動(dòng)渲染;
layout設(shè)計(jì);
中間件插入邏輯;
方便的JSON/XML服務(wù);
由于 golang 提供了完善的net/http標(biāo)準(zhǔn)庫(kù),基于該標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)一個(gè)web框架的難度相比其他語(yǔ)言低了不少,所以go web框架簡(jiǎn)直就是百花齊放。從老牌的revel和 beego ,到新出的 gin ,和 iris 等,而且還有一些類(lèi)似于 chi 這種router。個(gè)人一般小項(xiàng)目,尤其是中間件需要暴露一些http接口的,基本就使用chi即可。
本次測(cè)試主要是gin iris echo 這三個(gè)框架。側(cè)重在于高性能,從并發(fā)和json序列化和反序列化兩個(gè)方面來(lái)測(cè)評(píng),畢竟后臺(tái)項(xiàng)目側(cè)重的也就是這兩個(gè)方面。
為了選擇符合重IO的框架,現(xiàn)設(shè)定如下場(chǎng)景的demo,demo的具體要求如下:
gin:
iris:
echo:
由于要測(cè)試5種body樣本,4種場(chǎng)景,4個(gè)框架,因此把重點(diǎn)數(shù)據(jù)篩選出來(lái)(吞吐量、錯(cuò)誤率和99%Line,重要性依次遞減),結(jié)果都繪制了圖形,方便比對(duì)查看。
綜合以上各個(gè)測(cè)試結(jié)果可以看出,gin以及iris都是非常優(yōu)秀的框架,gin的優(yōu)勢(shì)比其他稍微大點(diǎn),iris次之,而echo相應(yīng)差一點(diǎn)。
本次測(cè)試只是簡(jiǎn)單測(cè)試了一下3個(gè)框架的并發(fā)和json相關(guān)。對(duì)比結(jié)果,不包括生態(tài)和工具的完善度等等。如果測(cè)試有什么不完善的地方,歡迎交流。
另外歡迎大家試用和star另外一個(gè)web框架 baa ,為了避嫌我沒(méi)有貼出baa的數(shù)據(jù),性能測(cè)試處于gin之后和iris之間。
你要的應(yīng)該是 Reids 或 Memcached 這些緩存服務(wù),在 Go 語(yǔ)言中的客戶端工具。
GitHub 上有個(gè) repo 叫 awesome-go(GitHub - avelino/awesome-go: A curated list of awesome Go frameworks, libraries and software),整理了常見(jiàn)的 Go 框架或代碼庫(kù),其中就有 Redis 和 Memcached 的客戶端。
? 何為框架:
框架一直是敏捷開(kāi)發(fā)中的利器,能讓開(kāi)發(fā)者很快的上手并做出應(yīng)用,甚至有的時(shí)候,脫離了框架,一些開(kāi)發(fā)者都不會(huì)寫(xiě)程序了。成長(zhǎng)總不會(huì)一蹴而就,從寫(xiě)出程序獲取成就感,再到精通框架,快速構(gòu)造應(yīng)用,當(dāng)這些方面都得心應(yīng)手的時(shí)候,可以嘗試改造一些框架,或是自己創(chuàng)造一個(gè)。
Gin是一個(gè)golang的微框架,封裝比較優(yōu)雅,API友好,源碼注釋比較明確,已經(jīng)發(fā)布了1.0版本。具有快速靈活,容錯(cuò)方便等特點(diǎn)。其實(shí)對(duì)于golang而言,web框架的依賴(lài)要遠(yuǎn)比Python,Java之類(lèi)的要小。自身的net/http足夠簡(jiǎn)單,性能也非常不錯(cuò)??蚣芨袷且恍┏S煤瘮?shù)或者工具的集合。借助框架開(kāi)發(fā),不僅可以省去很多常用的封裝帶來(lái)的時(shí)間,也有助于團(tuán)隊(duì)的編碼風(fēng)格和形成規(guī)范。
(1)首先需要安裝,安裝比較簡(jiǎn)單,使用go get即可
go get github.com/gin-gonic/gin
如果安裝失敗,直接去Github clone下來(lái),放置到對(duì)應(yīng)的目錄即可。
(2)代碼中使用:
下面是一個(gè)使用Gin的簡(jiǎn)單例子:
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
router.Run(":8080") // listen and serve on 0.0.0.0:8080
}
簡(jiǎn)單幾行代碼,就能實(shí)現(xiàn)一個(gè)web服務(wù)。使用gin的Default方法創(chuàng)建一個(gè)路由handler。然后通過(guò)HTTP方法綁定路由規(guī)則和路由函數(shù)。不同于net/http庫(kù)的路由函數(shù),gin進(jìn)行了封裝,把request和response都封裝到gin.Context的上下文環(huán)境。最后是啟動(dòng)路由的Run方法監(jiān)聽(tīng)端口。麻雀雖小,五臟俱全。當(dāng)然,除了GET方法,gin也支持POST,PUT,DELETE,OPTION等常用的restful方法。
Gin可以很方便的支持各種HTTP請(qǐng)求方法以及返回各種類(lèi)型的數(shù)據(jù),詳情可以前往查看。
2.1 匹配參數(shù)
我們可以使用Gin框架快速的匹配參數(shù),如下代碼所示:
冒號(hào):加上一個(gè)參數(shù)名組成路由參數(shù)??梢允褂胏.Param的方法讀取其值。當(dāng)然這個(gè)值是字串string。諸如/user/rsj217,和/user/hello都可以匹配,而/user/和/user/rsj217/不會(huì)被匹配。
瀏覽器輸入以下測(cè)試:
返回結(jié)果為:
其中c.String是gin.Context下提供的方法,用來(lái)返回字符串。
其中c.Json是gin.Context下提供的方法,用來(lái)返回Json。
下面我們使用以下gin提供的Group函數(shù),方便的為不同的API進(jìn)行分類(lèi)。
我們創(chuàng)建了一個(gè)gin的默認(rèn)路由,并為其分配了一個(gè)組 v1,監(jiān)聽(tīng)hello請(qǐng)求并將其路由到視圖函數(shù)HelloPage,最后綁定到 0.0.0.0:8000
C.JSON是Gin實(shí)現(xiàn)的返回json數(shù)據(jù)的內(nèi)置方法,包含了2個(gè)參數(shù),狀態(tài)碼和返回的內(nèi)容。http.StatusOK代表返回狀態(tài)碼為200,正文為{"message": “welcome"}。
注:Gin還包含更多的返回方法如c.String, c.HTML, c.XML等,請(qǐng)自行了解。可以方便的返回HTML數(shù)據(jù)
我們?cè)谥暗慕Mv1路由下新定義一個(gè)路由:
下面我們?cè)L問(wèn)
可以看到,通過(guò)c.Param(“key”)方法,Gin成功捕獲了url請(qǐng)求路徑中的參數(shù)。同理,gin也可以捕獲常規(guī)參數(shù),如下代碼所示:
在瀏覽器輸入以下代碼:
通過(guò)c.Query(“key”)可以成功接收到url參數(shù),c.DefaultQuery在參數(shù)不存在的情況下,會(huì)由其默認(rèn)值代替。
我們還可以為Gin定義一些默認(rèn)路由:
這時(shí)候,我們?cè)L問(wèn)一個(gè)不存在的頁(yè)面:
返回如下所示:
下面我們測(cè)試在Gin里面使用Post
在測(cè)試端輸入:
附帶發(fā)送的數(shù)據(jù),測(cè)試即可。記住需要使用POST方法.
繼續(xù)修改,將PostHandler的函數(shù)修改如下
測(cè)試工具輸入:
發(fā)送的內(nèi)容輸入:
返回結(jié)果如下:
備注:此處需要指定Content-Type為application/x-www-form-urlencoded,否則識(shí)別不出來(lái)。
一定要選擇對(duì)應(yīng)的PUT或者DELETE方法。
Gin框架快速的創(chuàng)建路由
能夠方便的創(chuàng)建分組
支持url正則表達(dá)式
支持參數(shù)查找(c.Param c.Query c.PostForm)
請(qǐng)求方法精準(zhǔn)匹配
支持404處理
快速的返回給客戶端數(shù)據(jù),常用的c.String c.JSON c.Data
Go作為近兩年迅速流行起來(lái)的編程語(yǔ)言始終致力于使事情簡(jiǎn)單化。它并未引入很多新概念,而是聚焦于打造一門(mén)簡(jiǎn)單的語(yǔ)言,讓開(kāi)發(fā)者使用起來(lái)感覺(jué)異??焖偾液?jiǎn)單。相信有意向深入學(xué)習(xí)Go語(yǔ)言的小伙伴都在研究Go的開(kāi)源項(xiàng)目,今天我就把自己覺(jué)得不錯(cuò)的6個(gè)Go開(kāi)源項(xiàng)目推薦給大家,希望大家能獲得收獲和成長(zhǎng)。
推薦一:kubernetes 【Star:44418】
Kubernetes基于Docker,其目的是讓用戶通過(guò)Kubernetes集群來(lái)進(jìn)行云端容器集群的管理,而無(wú)需用戶進(jìn)行復(fù)雜的設(shè)置工作。系統(tǒng)會(huì)自動(dòng)選取合適的工作節(jié)點(diǎn)來(lái)執(zhí)行具體的容器集群調(diào)度處理工作。
推薦二:etcd 【Star:21408】
etcd是由CoreOS開(kāi)發(fā)并維護(hù)鍵值存儲(chǔ)系統(tǒng),它使用Go語(yǔ)言編寫(xiě),并通過(guò)Raft一致性算法處理日志復(fù)制以保證強(qiáng)一致性。目前,Google的容器集群管理系統(tǒng)Kubernetes、開(kāi)源PaaS平臺(tái)Cloud Foundry和CoreOS的Fleet都廣泛使用了etcd。
推薦三:deis 【Star:6093】
Deis是一個(gè)基于Docker和CoreOS的開(kāi)源PaaS平臺(tái),旨在讓部屬和管理服務(wù)器上的應(yīng)用變得輕松容易。它可以運(yùn)行在AWS、GCE以及Openstack平臺(tái)下。
推薦四:flynn 【Star:6936】
Flynn是一個(gè)使用Go語(yǔ)言編寫(xiě)的開(kāi)源PaaS平臺(tái),可自動(dòng)構(gòu)建部署任何應(yīng)用到Docker容器集群上運(yùn)行。Flynn項(xiàng)目受到Y(jié) Combinator的支持,目前仍在開(kāi)發(fā)中,被稱(chēng)為是下一代的開(kāi)源PaaS平臺(tái)。
推薦五:lime 【Star:13775】
相對(duì)上面的幾款Go語(yǔ)言在云端和服務(wù)器端之外,Lime則顯得比較特殊。Lime,則是一款用Go語(yǔ)言寫(xiě)的桌面編輯器程序,被看做是著名編輯器Sublime Text的開(kāi)源實(shí)現(xiàn)。
六:revel 【Star:10508】
Revel是一個(gè)高生產(chǎn)力的Go語(yǔ)言Web框架。Revel框架支持熱編譯,當(dāng)編輯、保存和刷新源碼時(shí),Revel會(huì)自動(dòng)編譯代碼和模板;全棧特性,支持路由、參數(shù)解析、緩存、測(cè)試、國(guó)際化等功能。
第一個(gè):Beego框架
Beego框架是astaxie的GOWeb開(kāi)發(fā)的開(kāi)源框架。Beego框架最大的特點(diǎn)是由八個(gè)大的基礎(chǔ)模塊組成,八大基礎(chǔ)模塊的特點(diǎn)是可以根據(jù)自己的需要進(jìn)行引入,模塊相互獨(dú)立,模塊之間耦合性低。
相應(yīng)的Beego的缺點(diǎn)就是全部使用時(shí)比較臃腫,通過(guò)bee工具來(lái)構(gòu)建項(xiàng)目時(shí),直接生成項(xiàng)目目錄和耦合關(guān)系,從而會(huì)導(dǎo)致在項(xiàng)目開(kāi)發(fā)過(guò)程中受制性較大。
第二個(gè):Gin框架
Gin是一個(gè)GOlang的微框架,封裝比較優(yōu)雅,API友好,源碼注釋比較明確,已經(jīng)發(fā)布了1.0版本;具有快速靈活、容錯(cuò)方便等特點(diǎn),其實(shí)對(duì)于golang而言,web框架的依賴(lài)遠(yuǎn)比Python、Java更小。
目前在很多使用golang的中小型公司中進(jìn)行業(yè)務(wù)開(kāi)發(fā),使用Gin框架的很多,大家如果想使用golang進(jìn)行熟練Web開(kāi)發(fā),可以多關(guān)注一下這個(gè)框架。
第三個(gè):Iris框架
Iris框架在其官方網(wǎng)站上被描述為GO開(kāi)發(fā)中最快的Web框架,并給出了多框架和多語(yǔ)言之前的性能對(duì)比。目前在github上,Iris框架已經(jīng)收獲了14433個(gè)star和1493個(gè)fork,可見(jiàn)是非常受歡迎的。
在實(shí)際開(kāi)發(fā)中,Iris框架與Gin框架的學(xué)習(xí)曲線幾乎相同,所以掌握了Gin就可以輕松掌握Iris框架。
第四個(gè):Echo框架
也是golang的微型Web框架,其具備快速HTTP路由器、支持?jǐn)U展中間件,同時(shí)還支持靜態(tài)文件服務(wù)、Websocket以及支持制定綁定函數(shù),制定相應(yīng)渲染函數(shù),并允許使用任意的HTML模版引擎。