您好,登錄后才能下訂單哦!
小編給大家分享一下Golang標準庫和外部庫有什么區別,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
前言:
我已經在生產中使用 Go
一段時間了,因為它的構建規模較小,并且由 goroutines
提供的并發性能以及直接在機器上運行構建的能力,所以我非常喜歡它的快速和可靠。
由于標準包的速度非常快,您可以在不使用任何第三方庫或框架的情況下構建生產就緒的微服務。這并不是說 Go
中沒有提供更多靈活性或速度的框架,只是它們不那么受歡迎。
官方通常告訴你堅持使用標準庫。具有諷刺意味的是, golang
框架 的頂級 Google
搜索結果一般都是關于為什么不應該使用標準庫。
我對標準庫的替代品進行了一些研究和基準測試,以了解它們的表現。我將它們分為我認為是關鍵的微服務組件。
所有基準測試都在下面列出的配置上運行。雖然正常的基準測試時間只有 1 秒,但我將所有測試運行了 10 秒,以確保每個測試周期都是一致的。
處理器 — 2.7 GHz Intel Core i7
RAM — 16GB — 16 GB 2133 MHz LPDDR3
Bench Time 10s
而不是標準的 1s
go test -bench=. -benchtime=10s
標準的 http Go
服務器帶有一個不錯的路由器,可以讀取查詢參數但不能讀取命名參數,例如,
/students/:studentID/grades/:gradeID
任何具有上述嵌套資源的 REST
服務都必須使用外部路由庫來解析它們。Gin
、Echo
、Beego
、Gorilla Mux
和 Goji
只是其中幾個知名框架(根據 Github
關注量)。
其中一些是具有路由功能的成熟中間件框架,而另一些則僅僅只是路由庫。
這些庫針對單個命名參數進行了測試,結果如下所示,Gin 擁有最快的路由器,Echo 排在第二位。
一旦 API
請求通過路由器并傳遞到控制器或處理程序,下一步就是在返回響應時對請求 JSON
或 Encode
進行解碼。
Go 有一個非常好的encoding
包,它支持多種格式,比如json
, XML
, csv
,但是快速瀏覽一下替代品會向你展示大量的庫。我針對標準encoding/json
包對 Jsoniter
、EasyJson
進行了基準測試,結果如下。
下面是編碼的結果,結果表明性能差異并不顯著
但是對于解碼 JSON
,jsoniter
執行速度比標準編碼包快 5 倍。
現在,如果您的請求已被解碼,下一步可能是應用您的業務邏輯,并可能執行一些數據庫操作。
大多數流行的語言都依賴于框架來構建與數據庫交互的微服務。在 Java
世界中,Hibernate
、Active Record for Rails
和 Django ORM
非常流行。ORM
(對象關系映射器)有時有助于更好地處理事務、表之間的關系,并有助于避免為簡單連接編寫復雜的 SQL
。
但是 Go
再次擁有一個非常好的database
標準庫,它使連接到關系數據庫變得非常容易,而且速度也非常快。但是,一個痛點是查詢。當您查詢某些行時,您必須手動映射行中的每個字段,然后將它們分配給struct
. 這有效,但很快就會變得混亂并讓您編寫大量代碼。sqlx
是一個庫,它允許您將整行掃描到您的結構變量中。
雖然sqlx減少了為構建 CRUD
而編寫的典型行數,但最終仍會多次編寫重復代碼。使用 ORM
可以幫助減少它并專注于您的業務邏輯。
database, database + sqlx, gorm , go-pg
對查詢進行了基準測試,下面是結果。令人驚訝的是,go-pgORM
的執行速度比標準包甚至sqlx還要快. GORM雖然在生態系統中非常有名,但速度相對較慢。
在 API
調用的每個步驟中,都有更好的框架或外部庫,它們將使您的響應更快并提供一定的靈活性。
看完了這篇文章,相信你對“Golang標準庫和外部庫有什么區別”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。