最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang標(biāo)準(zhǔn)庫和外部庫的性能比較

 更新時間:2021年10月18日 15:59:27   投稿:hqx  
這篇文章主要介紹Golang標(biāo)準(zhǔn)庫和外部庫的性能比較,下面文章講圍繞這兩點展開內(nèi)容,感興趣的小伙伴可以參考一下

前言:

我已經(jīng)在生產(chǎn)中使用 Go 一段時間了,因為它的構(gòu)建規(guī)模較小,并且由 goroutines 提供的并發(fā)性能以及直接在機(jī)器上運(yùn)行構(gòu)建的能力,所以我非常喜歡它的快速和可靠。

由于標(biāo)準(zhǔn)包的速度非???,您可以在不使用任何第三方庫或框架的情況下構(gòu)建生產(chǎn)就緒的微服務(wù)。這并不是說 Go 中沒有提供更多靈活性或速度的框架,只是它們不那么受歡迎。

官方通常告訴你堅持使用標(biāo)準(zhǔn)庫。具有諷刺意味的是, golang 框架 的頂級 Google 搜索結(jié)果一般都是關(guān)于為什么不應(yīng)該使用標(biāo)準(zhǔn)庫。

我對標(biāo)準(zhǔn)庫的替代品進(jìn)行了一些研究和基準(zhǔn)測試,以了解它們的表現(xiàn)。我將它們分為我認(rèn)為是關(guān)鍵的微服務(wù)組件。

所有基準(zhǔn)測試都在下面列出的配置上運(yùn)行。雖然正常的基準(zhǔn)測試時間只有 1 秒,但我將所有測試運(yùn)行了 10 秒,以確保每個測試周期都是一致的。

  • 處理器 — 2.7 GHz Intel Core i7
  • RAM — 16GB — 16 GB 2133 MHz LPDDR3
  • Bench Time 10s 而不是標(biāo)準(zhǔn)的 1s
  • go test -bench=. -benchtime=10s

1、路由

標(biāo)準(zhǔn)的 http Go 服務(wù)器帶有一個不錯的路由器,可以讀取查詢參數(shù)但不能讀取命名參數(shù),例如,

/students/:studentID/grades/:gradeID


任何具有上述嵌套資源的 REST 服務(wù)都必須使用外部路由庫來解析它們。Gin、Echo、Beego、Gorilla Mux Goji 只是其中幾個知名框架(根據(jù) Github 關(guān)注量)。

其中一些是具有路由功能的成熟中間件框架,而另一些則僅僅只是路由庫。

這些庫針對單個命名參數(shù)進(jìn)行了測試,結(jié)果如下所示,Gin 擁有最快的路由器,Echo 排在第二位。

2、JSON 序列化和反序列化

一旦 API 請求通過路由器并傳遞到控制器或處理程序,下一步就是在返回響應(yīng)時對請求 JSON Encode 進(jìn)行解碼。

Go 有一個非常好的encoding包,它支持多種格式,比如json, XML, csv,但是快速瀏覽一下替代品會向你展示大量的庫。我針對標(biāo)準(zhǔn)encoding/json包對 Jsoniter、EasyJson 進(jìn)行了基準(zhǔn)測試,結(jié)果如下。

下面是編碼的結(jié)果,結(jié)果表明性能差異并不顯著

但是對于解碼 JSONjsoniter執(zhí)行速度比標(biāo)準(zhǔn)編碼包快 5 倍。

現(xiàn)在,如果您的請求已被解碼,下一步可能是應(yīng)用您的業(yè)務(wù)邏輯,并可能執(zhí)行一些數(shù)據(jù)庫操作。

3、是否使用ORM框架

大多數(shù)流行的語言都依賴于框架來構(gòu)建與數(shù)據(jù)庫交互的微服務(wù)。在 Java 世界中,Hibernate、Active Record for Rails Django ORM 非常流行。ORM(對象關(guān)系映射器)有時有助于更好地處理事務(wù)、表之間的關(guān)系,并有助于避免為簡單連接編寫復(fù)雜的 SQL。

但是 Go 再次擁有一個非常好的database標(biāo)準(zhǔn)庫,它使連接到關(guān)系數(shù)據(jù)庫變得非常容易,而且速度也非???。但是,一個痛點是查詢。當(dāng)您查詢某些行時,您必須手動映射行中的每個字段,然后將它們分配給struct. 這有效,但很快就會變得混亂并讓您編寫大量代碼。sqlx是一個庫,它允許您將整行掃描到您的結(jié)構(gòu)變量中。

雖然sqlx減少了為構(gòu)建 CRUD 而編寫的典型行數(shù),但最終仍會多次編寫重復(fù)代碼。使用 ORM 可以幫助減少它并專注于您的業(yè)務(wù)邏輯。

database, database + sqlx, gorm , go-pg 對查詢進(jìn)行了基準(zhǔn)測試,下面是結(jié)果。令人驚訝的是,go-pgORM 的執(zhí)行速度比標(biāo)準(zhǔn)包甚至sqlx還要快. GORM雖然在生態(tài)系統(tǒng)中非常有名,但速度相對較慢。

API 調(diào)用的每個步驟中,都有更好的框架或外部庫,它們將使您的響應(yīng)更快并提供一定的靈活性。

4、總結(jié)

雖然一些外部庫的性能改進(jìn)非常明顯,但這不應(yīng)該成為遠(yuǎn)離標(biāo)準(zhǔn)庫的原因。諸如測試代碼的難易程度、開源庫的長期維護(hù)、團(tuán)隊的學(xué)習(xí)曲線等都應(yīng)該考慮在內(nèi)。盡管如此,我認(rèn)為像 echo + jsoniter + go-pgGo 等標(biāo)準(zhǔn)庫功能的所有令人敬畏的東西將是構(gòu)建微服務(wù)并避免冗余代碼的最快方法。

到此這篇關(guān)于Golang標(biāo)準(zhǔn)庫和外部庫的性能比較的文章就介紹到這了,更多相關(guān)Golang標(biāo)準(zhǔn)庫和外部庫的性能內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語言學(xué)習(xí)網(wǎng)絡(luò)編程與Http教程示例

    Go語言學(xué)習(xí)網(wǎng)絡(luò)編程與Http教程示例

    這篇文章主要為大家介紹了Go語言學(xué)習(xí)網(wǎng)絡(luò)編程與Http教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Golang中struct{}和struct{}{}的區(qū)別解析

    Golang中struct{}和struct{}{}的區(qū)別解析

    這篇文章主要介紹了Golang中struct{}和struct{}{}的區(qū)別,通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • go module構(gòu)建項目的實現(xiàn)

    go module構(gòu)建項目的實現(xiàn)

    本文主要介紹了go module構(gòu)建項目的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • golang去除多余的空格與換行符示例代碼

    golang去除多余的空格與換行符示例代碼

    Golang是一種強(qiáng)大的編程語言,提供了豐富的字符串處理功能,這篇文章主要給大家介紹了關(guān)于golang去除多余的空格與換行符的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • go?分布式鎖簡單實現(xiàn)實例詳解

    go?分布式鎖簡單實現(xiàn)實例詳解

    這篇文章主要為大家介紹了go?分布式鎖簡單實現(xiàn)實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • go mayfly開源項目代碼結(jié)構(gòu)設(shè)計

    go mayfly開源項目代碼結(jié)構(gòu)設(shè)計

    這篇文章主要為大家介紹了go mayfly開源項目代碼結(jié)構(gòu)設(shè)計詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Go泛型應(yīng)用工廠方法及泛型使用

    Go泛型應(yīng)用工廠方法及泛型使用

    這篇文章主要介紹了Go泛型應(yīng)用工廠方法及泛型使用,結(jié)合工廠方法+泛型方法來看一下泛型到底是如何在業(yè)務(wù)場景中使用的,需要的小伙伴可以參考一下
    2022-07-07
  • golang類型轉(zhuǎn)換組件Cast的使用詳解

    golang類型轉(zhuǎn)換組件Cast的使用詳解

    這篇文章主要介紹了golang類型轉(zhuǎn)換組件Cast的使用詳解,幫助大家更好的理解和學(xué)習(xí)使用golang,感興趣的朋友可以了解下
    2021-02-02
  • golang實現(xiàn)大文件上傳功能全過程

    golang實現(xiàn)大文件上傳功能全過程

    Go語言可以用來實現(xiàn)大文件傳輸,下面這篇文章主要給大家介紹了關(guān)于golang實現(xiàn)大文件上傳功能的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • Go web入門Go pongo2模板引擎

    Go web入門Go pongo2模板引擎

    這篇文章主要為大家介紹了Go web編程入門Go pongo2模板引擎使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05

最新評論

衢州市| 香格里拉县| 海林市| 德令哈市| 银川市| 通山县| 宿松县| 麦盖提县| 洪湖市| 大邑县| 鸡西市| 宁乡县| 轮台县| 舒城县| 大悟县| 五华县| 马龙县| 桂平市| 邵阳县| 米脂县| 特克斯县| 侯马市| 昌图县| 普陀区| 衡东县| 辽源市| 大庆市| 崇左市| 林西县| 湟源县| 红河县| 信阳市| 岳西县| 水城县| 乌拉特中旗| 焦作市| 观塘区| 玉环县| 大新县| 财经| 海兴县|