學(xué)完了 net/http 和 fasthttp 兩個HTTP協(xié)議接口的客戶端實現(xiàn),接下來就要開始Server的開發(fā),不學(xué)不知道一學(xué)嚇一跳,居然這兩個庫還支持Server的開發(fā),太方便了。
成都創(chuàng)新互聯(lián)公司專注于企業(yè)營銷型網(wǎng)站、網(wǎng)站重做改版、寬城網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5場景定制、電子商務(wù)商城網(wǎng)站建設(shè)、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為寬城等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
相比于Java的HTTPServer開發(fā)基本上都是使用Spring或者Springboot框架,總是要配置各種配置類,各種 handle 對象。Golang的Server開發(fā)顯得非常簡單,就是因為特別簡單,或者說沒有形成特別統(tǒng)一的規(guī)范或者框架,我發(fā)現(xiàn)了很多實現(xiàn)方式,HTTP協(xié)議基于還是 net/http 和 fasthttp ,但是 handle 語法就多種多樣了。
先復(fù)習(xí)一下: Golang語言HTTP客戶端實踐 、 Golang fasthttp實踐 。
在Golang語言方面,實現(xiàn)某個功能的庫可能會比較多,有機會還是要多跟同行交流,指不定就發(fā)現(xiàn)了更好用的庫。下面我分享我學(xué)到的六種Server開發(fā)的實現(xiàn)Demo。
基于 net/http 實現(xiàn),這是一種比較基礎(chǔ)的,對于接口和 handle 映射關(guān)系處理并不優(yōu)雅,不推薦使用。
第二種也是基于 net/http ,這種編寫語法可以很好地解決第一種的問題,handle和path有了類似配置的語法,可讀性提高了很多。
第三個基于 net/http 和 github點抗 /labstack/echo ,后者主要提供了 Echo 對象用來處理各類配置包括接口和handle映射,功能很豐富,可讀性最佳。
第四種依然基于 net/http 實現(xiàn),引入了 github點抗 /gin-gonic/gin 的路由,看起來接口和 handle 映射關(guān)系比較明晰了。
第五種基于 fasthttp 開發(fā),使用都是 fasthttp 提供的API,可讀性尚可,handle配置倒是更像Java了。
第六種依然基于 fasthttp ,用到了 github點抗 /buaazp/fasthttprouter ,有點奇怪兩個居然不在一個GitHub倉庫里。使用語法跟第三種方式有點類似,比較有條理,有利于閱讀。
先給結(jié)論:完全可以
商用實踐:
已經(jīng)通過很多大公司的商用實踐,例如B站,YY,包括字節(jié)跳動,國外更不用說了,Google,所以從這個角度上來說,已經(jīng)經(jīng)過大規(guī)模的實踐,所以如果你想用用于自己小網(wǎng)站的搭建是沒有任何問題,如果你想用于初創(chuàng)公司的使用,還是需要有自己的一定積累,至少有過實踐的經(jīng)驗
golang周邊:
java在國內(nèi)的強大,得益于它的生態(tài),各種組件百花爭鳴,例如消息中間件rocketmq,分庫分表sharding-jdbc,spring整個生態(tài),mybatis,jedis,elasticsearch,zookeeper,dubbo等等都非常齊全,這樣可以方便大家能夠快速地進行公司業(yè)務(wù)開發(fā),可以減少重復(fù)造輪子
golang這幾年也開始逐漸發(fā)力,各個組件也開始完善起來,例如etcd,消息中間件nsq,從跟上解決數(shù)據(jù)量巨大問題,pingcap公司開發(fā)了線事務(wù)處理/在線分析處理的融合型數(shù)據(jù)庫產(chǎn)品TIDB,
web框架gin,beego,iris等等,也有各路大神提供了連接各個其他redis,elasticsearch等等組件,還是比較齊全的,rpc框架也有g(shù)o-mirco,rpcx等等,只要你想要用,基本上來說,golang的生態(tài)周邊還是比較全的,方便大家使用
golang的模塊管理
java的方便還得益于它的包管理,maven,gradle,這樣大大方便了大家的使用,可以提供大家的開發(fā)效率,而golang從1.12開始也開始有了自己內(nèi)嵌的包管理工具
golang的新特性
在這邊我并不是說golang好于java,但是golang畢竟屬于新一代的語言,它的并發(fā)模型CSP,和java的并發(fā)模型是有很大的區(qū)別的,并發(fā)模型的易用性,從根本上來說,是好于java的
再說golang目前最大的優(yōu)勢,docker和kubernetes,是目前github上最火的前20名項目,并且都是golang寫的,所以golang和docker,kubernetes集成有天然的優(yōu)勢
綜上所述,我覺得golang可以開發(fā)商用網(wǎng)站,不管你是做大型網(wǎng)站還是小型demo,都可以滿足你的要求
可以先直接使用go自帶的http server 框架,這個框架涵蓋了絕大多數(shù)的功能,比如request response 的基本封裝,簡單的路由管理,文件上傳處理。
如果發(fā)現(xiàn)Go 自帶的框架解決不了問題,可以引入相應(yīng)的第三方組件,比如ORM可以采用中國人寫的gorm 比如web 的session 管理可以使用gorilla/session
當(dāng)然你也可以直接上大一統(tǒng)的框架比如你提到的beego 還有大名鼎鼎的martini 。不過不推薦,因為這樣的大框架和Go 語言本身的模塊設(shè)計有沖突。
實際開發(fā)建議用vscode 加Go 插件來做IDE,基本包含了其他成熟IDE的所有功能,而且還自帶強大的debug 功能。其他IDE debug 用起來非常麻煩比如idea 和liteIDE。題主也可以自己試下。