先說(shuō)結(jié)論:我們選型Gin框架
早在大概在2019年下旬,由于內(nèi)部一個(gè)多線程上傳的需求,考慮到Go協(xié)程的優(yōu)勢(shì);
內(nèi)部采用Gin框架編寫(xiě)了內(nèi)部的數(shù)據(jù)上傳平臺(tái)BAP,采用Gin+Vue開(kāi)發(fā),但前期沒(méi)考慮到工程化思維,導(dǎo)致代碼后期維護(hù)程度變得很復(fù)雜,硬編碼內(nèi)容過(guò)多,重復(fù)內(nèi)容過(guò)多;
項(xiàng)目說(shuō)明:其中一半采用Gin作為Web頁(yè)面API,一半做了腳本獨(dú)立運(yùn)行。
此次鑒于新項(xiàng)目的開(kāi)發(fā),準(zhǔn)備將代碼工程化思維重構(gòu)。
首先考慮到業(yè)務(wù)的增長(zhǎng),以后需要將公司項(xiàng)目朝著自動(dòng)化運(yùn)維、微服務(wù)、集群、分布式項(xiàng)目的方向發(fā)展,云原生的需求,底層部署會(huì)向Docker+Kubernetes方向靠攏
目前在行的PHP為主的項(xiàng)目就顯得不那么友好(業(yè)務(wù)代碼繁雜,開(kāi)發(fā)環(huán)境依賴重,資源消耗占用大等),并且其中還嵌套了Python腳本。
這催生了我們選擇go語(yǔ)言重構(gòu)及開(kāi)發(fā)新項(xiàng)目的打算:
go語(yǔ)言的優(yōu)勢(shì)如下:
- Go天生的自帶并發(fā)調(diào)度,如協(xié)程和通道,且協(xié)程內(nèi)存占用少,一個(gè)Goroutine??臻g最小2K
- Go自帶的格式統(tǒng)一,gofmt工具
- Go語(yǔ)法的簡(jiǎn)潔,可讀性強(qiáng),嚴(yán)格語(yǔ)言規(guī)范
- Go作為靜態(tài)語(yǔ)言,編譯效率高,性能相對(duì)高
- Go跨平臺(tái)的編譯使用,跟操作shell命令一樣的調(diào)用,部署方便,目前很多腳本都是這么來(lái)做的。
- 豐富的內(nèi)置類型,內(nèi)置強(qiáng)大的工具
- 內(nèi)置runtime,自動(dòng)垃圾回收機(jī)制
由于我們很多項(xiàng)目都是基于BS架構(gòu)的模式,我們也不希望過(guò)重的框架,開(kāi)發(fā)高性能的API服務(wù)以及后續(xù)的微服務(wù),進(jìn)行前后端分離開(kāi)發(fā)模式(go+vue)
所以我們就要從go熱門(mén)的幾款框架中做了對(duì)比:
統(tǒng)計(jì)star時(shí)間:2021-12-15
- Beego: 一個(gè)Go語(yǔ)言下開(kāi)源的,高性能Web框架 ;
- github:https://github.com/beego/beego, star 27.4k
- Buffalo: 一個(gè)Go語(yǔ)言下快速Web開(kāi)發(fā)框架 ;
- github:https://github.com/gobuffalo/buffalo, star 6.5k
- Echo: 一個(gè)高性能,極簡(jiǎn)的Web框架;
- github:https://github.com/labstack/echo,21.3k
- Gin: 一個(gè)Go語(yǔ)言寫(xiě)的HTTP Web框架。它提供了Martini風(fēng)格的API并有更好的性能;
- github:https://github.com/gin-gonic/gin, star 53.9k
- Revel: 一個(gè)高生產(chǎn)率,全棧Go語(yǔ)言的Web框架;
- github:https://github.com/revel/revel,star 12.5k
- Iris: 目前發(fā)展最快的Go Web框架。提供完整的MVC功能并且面向未來(lái);
- github:https://github.com/kataras/iris,star 21.6k
選擇Gin的幾點(diǎn)說(shuō)明:
- 可以看到Gin的star數(shù)最多,只是一個(gè)指標(biāo),說(shuō)明使用人多,然后社區(qū)人員活躍
- 功能簡(jiǎn)單易用性強(qiáng),可擴(kuò)展空間大
- 內(nèi)部使用的路由是httprouter(性能非常好的路由框架).
當(dāng)然這些不夠,如何把輕框架即滿足需求又容易擴(kuò)展,還是要參考熱門(mén)的開(kāi)源項(xiàng)目,對(duì)該框架進(jìn)行補(bǔ)充;如:Docker,Kubernetes,Hugo,awesome-go等
詳細(xì)對(duì)比參考地址:https://github.com/speedwheel/awesome-go-web-frameworks/blob/master/README.md文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-798221.html
附帶一些Gin框架開(kāi)發(fā)相關(guān)的輔助工具文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-798221.html
- gin-swagger:通過(guò)注釋自動(dòng)生成swagger api文檔
- gorm:ORM庫(kù)旨在讓開(kāi)發(fā)人員更加友好
- cobra:A Commander for modern Go CLI interactions(現(xiàn)代Go CLI交互的命令行工具集)
- viper:Viper是Go應(yīng)用程序的完整配置解決方案,toml,yaml等配置文件讀取
- jwt-go 用于生成、解析JWT token
- aliyun-oss-go-sdk 阿里云OSS官方包,用于操作OSS(當(dāng)然這塊具體業(yè)務(wù)了,我們使用alisdk較多)
- excelize 讀寫(xiě)Excel
到了這里,關(guān)于Go新項(xiàng)目-為何選Gin框架?(0)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!