golang有許多優(yōu)秀的第三方庫(kù),有時(shí)要使用時(shí)忘記庫(kù)名又要去github找半天粟矿,還是寫下來(lái)做個(gè)筆記并且逐步添加撩轰。以下的庫(kù)基本都實(shí)際使用過(guò)档桃。
log
logrus
star最多的log項(xiàng)目,我現(xiàn)在基本都使用這個(gè)項(xiàng)目蝶防,因?yàn)閷懛ǜ俜郊嫒莺芊奖恪?br>
但是logrus沒(méi)有日志文件自動(dòng)切割功能甚侣,找了半天找到這個(gè):
file-rotatelogs
也有人把beego的部分代碼
抽出來(lái)做成rotate。不過(guò)上面的file-rotatelogs應(yīng)該可以滿足需求了间学。
zap
號(hào)稱最快的go log庫(kù)殷费,但是寫法別扭,所以我一直沒(méi)用上低葫。
JSON解析
json-iterator
號(hào)稱最快的go json解析器详羡。跟官方的寫法兼容,我目前基本都使用這個(gè)解析器嘿悬。
tidwall/gjson
主要用來(lái)解析JSON实柠。
不用再定義復(fù)雜結(jié)構(gòu),直接像其他語(yǔ)言一樣根據(jù)Key來(lái)獲取數(shù)據(jù)善涨,方便很多主到。
而且gjson官方自己的測(cè)試結(jié)果性能還是不錯(cuò)的。
實(shí)際使用跟官方混用比較好:
gjson對(duì)于Json數(shù)據(jù)格式不是很嚴(yán)格的情況最為有用躯概,還有就是JSON數(shù)據(jù)結(jié)構(gòu)定義太多但又只想讀取部分值的情況登钥。
官方用在數(shù)據(jù)格式嚴(yán)格定義且數(shù)據(jù)穩(wěn)定的情況比gjson好用。
Web框架
gin-gonic/gin
一開(kāi)始就使用gin娶靡,因?yàn)槁?tīng)說(shuō)性能不錯(cuò)牧牢,而且我基本只需要做API,對(duì)html模板基本無(wú)需求姿锭,使用的結(jié)果感覺(jué)還是不錯(cuò)塔鳍,簡(jiǎn)單容易上手。
fasthttp
最快的go http服務(wù)器呻此,不支持http2.0轮纫,有性能需求時(shí)可以考慮使用。此開(kāi)源項(xiàng)目對(duì)于go的優(yōu)化也值得學(xué)習(xí)焚鲜。
另一個(gè)star也很多的web框架:iris曾經(jīng)也是基于fasthttp開(kāi)發(fā)的掌唾,不過(guò)后來(lái)也改成基于go默認(rèn)的net/http放前,根據(jù)iris作者的說(shuō)法主要是因?yàn)閒asthttp不支持http2.0,而且很多第三方的庫(kù)都是基于net/http編寫糯彬,另外fasthttp的作者已經(jīng)很久不參與維護(hù)項(xiàng)目凭语。
所以fasthttp最好不要用于生產(chǎn),不過(guò)源碼里的goroutine池撩扒,內(nèi)存池等各種優(yōu)化值得學(xué)習(xí)似扔。
隨機(jī)數(shù)
NebulousLabs/fastrand
性能非常好的隨機(jī)數(shù)庫(kù),實(shí)測(cè)確實(shí)比官方隨機(jī)數(shù)快很多搓谆。
數(shù)據(jù)庫(kù)
golang數(shù)據(jù)庫(kù)自帶連接池炒辉,操作數(shù)據(jù)庫(kù)時(shí)需要事先了解一下這個(gè)概念。
1. go-sql-driver/mysql
我想大多數(shù)人都使用這個(gè)mysql連接驅(qū)動(dòng)包泉手。
2. gomodule/redigo
不錯(cuò)的redis客戶端辆脸。
protobuf
1. golang/protobuf
官方的protobuf庫(kù)。
2. gogo/protobuf
據(jù)說(shuō)比樓上官方的快很多螃诅,沒(méi)有實(shí)際使用過(guò)啡氢。
TOML庫(kù)
BurntSushi/toml
大多數(shù)go程序都使用toml做為配置文件。
配置庫(kù)
viper
支持從多種配置格式的文件术裸、環(huán)境變量倘是、命令行等讀取配置,具體功能如下:
setting defaults
reading from JSON, TOML, YAML, HCL, and Java properties config files
live watching and re-reading of config files (optional)
reading from environment variables
reading from remote config systems (etcd or Consul), and watching changes
reading from command line flags
reading from buffer
setting explicit values
爬蟲(chóng)
PuerkitoBio/goquery
感覺(jué)用golang寫爬蟲(chóng)比python更爽快袭艺。
我寫簡(jiǎn)單爬蟲(chóng)比較喜歡先用go的http.Client把文件全抓下來(lái)搀崭,然后使用goquery庫(kù)來(lái)解析本地的html文件。
附帶一下使用Fiddler4抓ios手機(jī)數(shù)據(jù)當(dāng)遇到https頁(yè)面時(shí)猾编,要先用ios的瀏覽器打開(kāi)代理的Fildder頁(yè)面瘤睹,安裝證書(shū),并且在ios系統(tǒng)設(shè)置里開(kāi)啟信任該證書(shū)答倡。然后就可以愉快的分析頁(yè)面了轰传。
當(dāng)使用go的http.Client下載https頁(yè)面,在創(chuàng)建http.Client時(shí)最好設(shè)置:
TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, //禁用https證書(shū)檢查
靜態(tài)打包工具
packr
將靜態(tài)資源打包成go文件瘪撇,直接編譯進(jìn)最終程序获茬。
圖表chart
go-echarts
中文官網(wǎng)文檔更詳細(xì)。
非常好的chart圖表倔既,是百度開(kāi)源js echarts的go封裝恕曲,發(fā)布程序時(shí)需要用到上面的packr把資源打包成go文件,然后再編譯發(fā)布渤涌。
另外默認(rèn)的js文件放在此開(kāi)源官方的服務(wù)器上佩谣,可以定制修改到自己的服務(wù)器。
Hashids
SnowFlake 算法
goSnowFlake
分布式id生成器
mail發(fā)送客戶端
驗(yàn)證碼服務(wù)
captcha
gocaptcha
gocaptcha - Go語(yǔ)言學(xué)習(xí)之驗(yàn)證碼服務(wù)實(shí)現(xiàn)原理
其實(shí)小系統(tǒng)用不著太復(fù)雜实蓬,我用的是自己寫的簡(jiǎn)單驗(yàn)證碼服務(wù)茸俭。