成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

幾個秒殺 Go 官方庫的第三方開源庫

存儲 存儲軟件
Go 語言官方庫給我們一貫的印象是:強大、好用。但是,金無足赤,人無完人,在一些性能要求苛刻的場景例如 json 解析,某些官方庫的表現不盡如人意。

[[427966]]

本文轉載自微信公眾號「Golang技術分享」,作者機器鈴砍菜刀。轉載本文請聯系Golang技術分享公眾號。

Go 語言官方庫給我們一貫的印象是:強大、好用。但是,金無足赤,人無完人,在一些性能要求苛刻的場景例如 json 解析,某些官方庫的表現不盡如人意。

本文介紹幾個對標官方庫的開源庫,它們的性能遠超前者。當讀者在使用這些官方庫遇到性能問題時,可以嘗試替換優化。

net/http -> fasthttp

地址:https://github.com/valyala/fasthttp

fasthttp號稱比net/http快十倍,其優化的核心思路很簡單:資源復用。

  • 復用 goroutine,減輕 runtime 調度壓力;
  • 對象復用,大量使用 sync.Pool 減輕 GC 壓力。

除了復用,還有其他的一些優化手段,例如盡量避免 string 與 []byte 的轉換開銷等。

這些優化技巧和最佳實踐,在其 Github 主頁上已經貼心給出:https://github.com/valyala/fasthttp#fasthttp-best-practices,建議閱讀學習。

因為fasthttp的實現與標準庫差距較大,所以它與net/http的 API 接口是不同的,這導致從net/http重構為fasthttp需要一些學習成本。

使用fasthttp的知名項目:Fiber、Gearbox、atreugo 等。

encoding/json -> jsoniter

地址:https://github.com/json-iterator/go

jsoniter(json-iterator)是一款快且靈活的 JSON 解析器,同時提供 Java 和 Go 兩個版本。官方稱 Golang 版本可以比標準庫(encoding/json)快 6 倍之多。

最重要的是,它與標準庫encoding/json完全兼容。

  • Marshal()
  1. # encoding/json  
  2. import "encoding/json" 
  3. json.Marshal(&data) 
  4.  
  5. # jsoniter 
  6. import jsoniter "github.com/json-iterator/go" 
  7.  
  8. var json = jsoniter.ConfigCompatibleWithStandardLibrary 
  9. json.Marshal(&data) 
  • Unmarshal()
  1. # encoding/json 
  2. import "encoding/json" 
  3. json.Unmarshal(input, &data) 
  4.  
  5. # jsoniter 
  6. import jsoniter "github.com/json-iterator/go" 
  7.  
  8. var json = jsoniter.ConfigCompatibleWithStandardLibrary 
  9. json.Unmarshal(input, &data) 

對其優化原理感興趣的讀者可以看這里:http://jsoniter.com/benchmark.html#optimization-used

golang/protobuf -> gogo/protobuf

地址:https://github.com/gogo/protobuf

ProtoBuf 的全稱是 Protocol Buffers,它是由 Google 開發和定義的與 XML、JSON 類似的一種協議格式,用于高效存儲與讀取結構化數據。它基于二進制,因此使用 ProtoBuf 能將數據壓縮得更小。

gogo/protobuf是基于官方庫golang/protobuf的增強版實現:

  • 比golang/protobuf更快地序列化與反序列化;
  • 更規范的 Go 結構;
  • 兼容golang/protobuf;
  • 可選地生成額外的幫助代碼,減少代碼輸入;
  • 可以生成測試代碼和 benchmark 代碼;
  • 其他序列化格式;

有很多知名項目都在使用該庫,例如 etcd、k8s、docker swarmkit、tidb、nakama 等。

html/template -> valyala/quicktemplate

地址:https://github.com/valyala/quicktemplate

quicktemplate啟發自 Python 的 Mako 項目,是一個快速、強大且易于使用的 Go 模板渲染引擎,它的主要特性如下:

  • quicktemplate會先將編寫的模板代碼轉換為 Go 語言代碼,再進行編譯渲染。因此,它比標準庫html/template快 20 倍以上。
  • quicktemplate的語法與 Go 語法非常類似,幾乎沒有學習成本。
  • 幾乎所有的 bug 都能在模板編譯時被捕獲,因此在實際項目中,很少會有受模板相關的bug影響。
  • 模板中可以嵌入任意 Go 代碼。

雖然quicktemplate的主要目的是生成 HTML,但它也可用于生成其他數據。

例如,使用quicktemplate可以輕松實現 JSON 和 XML 序列化,并且通過quicktemplate的序列化通常也會比通過標準庫encoding/json與encoding/xml更快。

總結

本文列出這幾個庫并不是讓你去立刻替換官方庫。例如net/http包,實際上它已經可以滿足大多數使用場景。

在使用官方庫時遇到了問題,我們很容易通過搜索引擎找到解決方案,或者直接向 Go 官方提 issue 。當切換為開源庫時,如果遇到了問題,并不一定能及時得到處理。

官方庫的 API 幾乎可以保證能與 Go 版本的迭代一直兼容,而三方庫可能存在潛在的版本兼容問題,這也是切換時需要考慮的問題。

本文列出來的幾個開源庫,它們的重點都是優化對應官方庫的性能問題。我們可以從這些開源庫中,學到很多實用的 Go 代碼優化技巧。

當然,如果你的項目中因為這些官方庫而導致了性能問題,不妨一試。

 

責任編輯:武曉燕 來源: Golang技術分享
相關推薦

2019-07-30 11:35:54

AndroidRetrofit

2013-01-15 13:50:22

iOS開發開源庫

2021-01-27 10:04:46

鴻蒙HarmonyOS動畫

2025-06-26 08:15:00

JustAuth

2014-07-22 10:56:45

Android Stu第三方類庫

2015-11-05 16:44:37

第三方登陸android源碼

2021-06-24 12:57:04

開源安全軟件

2021-03-05 09:58:50

鴻蒙HarmonyOS開源

2021-03-04 08:46:32

鴻蒙HarmonyOS應用

2011-07-25 14:14:49

iPhone SQLITE Pldatabase

2022-06-06 07:50:55

PythonJSON

2010-03-03 15:10:49

第三方Python庫

2013-08-14 09:50:32

iOS類庫

2022-05-21 23:56:16

Python庫搜索Python

2022-01-14 09:57:14

鴻蒙HarmonyOS應用

2020-10-29 09:56:23

Linux靜態庫動態庫

2022-09-05 09:01:47

第三方庫API

2017-03-14 13:03:18

Android架構第三方庫

2012-01-04 14:02:26

JsonCpp

2021-08-03 10:07:41

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美狠狠操 | www.99热这里只有精品 | 一级做a毛片| 日韩国产黄色片 | 亚洲一区 中文字幕 | av性色全交蜜桃成熟时 | 亚洲一区二区三区免费视频 | 亚洲a视频 | 国产精品无码久久久久 | 天天躁日日躁狠狠躁2018小说 | 久久久青草 | 精品国产久| 久久网一区二区 | 国产二区在线播放 | 欧美黄色小视频 | 69堂永久69tangcom | 中文在线一区 | 欧美一级片 | 九九亚洲精品 | 欧美日韩久久久 | 欧美福利| 国内久久精品 | 一级毛片免费完整视频 | 天堂一区 | 一区二区三区视频在线观看 | 天天爱av | 午夜国产精品视频 | 亚洲成人网在线播放 | 国产高清久久久 | 国产激情一区二区三区 | 91精品91久久久 | www.久久| 欧美人妇做爰xxxⅹ性高电影 | 国产a级毛毛片 | 久久国产精品99久久久久久丝袜 | 韩国av一区二区 | 日韩精品一区二区三区免费视频 | 少妇一级淫片免费播放 | 精品九九 | 国产精品1区 | 有码在线|