自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Go 業(yè)務(wù)開(kāi)發(fā)中常用的幾個(gè)開(kāi)源庫(kù)

開(kāi)發(fā) 開(kāi)發(fā)工具
最近總有一些初學(xué)Go語(yǔ)言的小伙伴問(wèn)我在業(yè)務(wù)開(kāi)發(fā)中一般都使用什么web框架、開(kāi)源中間件;所以我總結(jié)了我在日常開(kāi)發(fā)中使用到的庫(kù),這些庫(kù)不一定是特別完美的,但是基本可以解決日常工作需求,接下來(lái)我們就來(lái)看一下。

[[429442]]

本文轉(zhuǎn)載自微信公眾號(hào)「Golang夢(mèng)工廠」,作者AsongGo。轉(zhuǎn)載本文請(qǐng)聯(lián)系Golang夢(mèng)工廠公眾號(hào)。

前言

哈嘍,大家好,我是asong。拖更了好久,這周開(kāi)始更新。

最近總有一些初學(xué)Go語(yǔ)言的小伙伴問(wèn)我在業(yè)務(wù)開(kāi)發(fā)中一般都使用什么web框架、開(kāi)源中間件;所以我總結(jié)了我在日常開(kāi)發(fā)中使用到的庫(kù),這些庫(kù)不一定是特別完美的,但是基本可以解決日常工作需求,接下來(lái)我們就來(lái)看一下。

Gin

Gin是一個(gè)用Go編寫(xiě)的Web框架,它是一個(gè)類(lèi)似于martini但擁有更好性能的API框架?;粳F(xiàn)在每個(gè)Go初學(xué)者學(xué)習(xí)的第一個(gè)web框架都是Gin。在網(wǎng)上看到一個(gè)關(guān)于對(duì)各個(gè)Go-web框架受歡迎的對(duì)比:

來(lái)自網(wǎng)絡(luò)

我們可以看到Gin在社區(qū)受歡迎排第一,Gin 框架往往是進(jìn)行 Web 應(yīng)用開(kāi)發(fā)的首選框架,許多公司都會(huì)選擇采用Gin框架進(jìn)行二次開(kāi)發(fā),加入日志,服務(wù)發(fā)現(xiàn)等功能,像Bilibili 開(kāi)源的一套 Go 微服務(wù)框架 Kratos 就采用 Gin 框架進(jìn)行了二次開(kāi)發(fā)。

學(xué)習(xí)Gin通過(guò)他的官方文檔就可以很快入手,不過(guò)文檔時(shí)英文的,這個(gè)不用擔(dān)心,我曾翻譯了一份中文版,可以到我的公眾號(hào)后臺(tái)獲取,回復(fù)【gin】即可獲取。

github地址:https://github.com/gin-gonic/gin

zap

  • zap是uber開(kāi)源的日志庫(kù),選擇zap他有兩個(gè)優(yōu)勢(shì):
  • 它非常的快

它同時(shí)提供了結(jié)構(gòu)化日志記錄和printf風(fēng)格的日志記錄

大多數(shù)日志庫(kù)基本都是基于反射的序列化和字符串格式化的,這樣會(huì)導(dǎo)致在日志上占用大量CPU資源,不適用于業(yè)務(wù)開(kāi)發(fā)場(chǎng)景,業(yè)務(wù)對(duì)性能敏感還是挺高的。zap采用了不同的方法,它設(shè)計(jì)了一個(gè)無(wú)反射、零分配的 JSON 編碼器,并且基礎(chǔ) Logger 力求盡可能避免序列化開(kāi)銷(xiāo)和分配。通過(guò)在此基礎(chǔ)上構(gòu)建高級(jí) SugaredLogger,zap 允許用戶(hù)選擇何時(shí)需要計(jì)算每次分配以及何時(shí)更喜歡更熟悉的松散類(lèi)型的 API。

zap的基準(zhǔn)測(cè)試如下:

來(lái)自官方文檔

可以看出zap的效率完全高于其他日志庫(kù),選誰(shuí)不用我明說(shuō)了吧!!!

github地址:https://github.com/uber-go/zap

jsoniter

做業(yè)務(wù)開(kāi)發(fā)離不開(kāi)json的序列化與反序列化,標(biāo)準(zhǔn)庫(kù)雖然提供了encoding/json,但是它主要是通過(guò)反射來(lái)實(shí)現(xiàn)的,所以性能消耗比較大。jsoniter可以解決這個(gè)痛點(diǎn),其是一款快且靈活的 JSON 解析器,具有良好的性能并能100%兼容標(biāo)準(zhǔn)庫(kù),我們可以使用jsoniter替代encoding/json,官方文檔稱(chēng)可以比標(biāo)準(zhǔn)庫(kù)快6倍多,后來(lái)Go官方在go1.12版本對(duì) json.Unmarshal 函數(shù)使用 sync.Pool 緩存了 decoder,性能較之前的版本有所提升,所以現(xiàn)在達(dá)不到快6倍多。

來(lái)自官方文檔

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

對(duì)于jsoniter優(yōu)化原理感興趣的可以移步這里:http://jsoniter.com/benchmark.html#optimization-used

gorm

gorm是一個(gè)使用Go語(yǔ)言編寫(xiě)的ORM框架,文檔齊全,對(duì)開(kāi)發(fā)者友好,并且支持主流的數(shù)據(jù)庫(kù):MySQL, PostgreSQL, SQlite, SQL Server。

個(gè)人覺(jué)得使用gorm最大的好處在于它是由國(guó)人開(kāi)發(fā),中文文檔齊全,上手很快,目前大多數(shù)企業(yè)也都在使用gorm。我們來(lái)一下gorm的特性:

  • 全功能 ORM
  • 關(guān)聯(lián) (Has One,Has Many,Belongs To,Many To Many,多態(tài),單表繼承)
  • Create,Save,Update,Delete,F(xiàn)ind 中鉤子方法
  • 支持 Preload、Joins 的預(yù)加載
  • 事務(wù),嵌套事務(wù),Save Point,Rollback To Saved Point
  • Context、預(yù)編譯模式、DryRun 模式
  • 批量插入,F(xiàn)indInBatches,F(xiàn)ind/Create with Map,使用 SQL 表達(dá)式、Context Valuer 進(jìn)行 CRUD
  • SQL 構(gòu)建器,Upsert,數(shù)據(jù)庫(kù)鎖,Optimizer/Index/Comment Hint,命名參數(shù),子查詢(xún)
  • 復(fù)合主鍵,索引,約束
  • Auto Migration
  • 自定義 Logger
  • 靈活的可擴(kuò)展插件 API:Database Resolver(多數(shù)據(jù)庫(kù),讀寫(xiě)分離)、Prometheus…
  • 每個(gè)特性都經(jīng)過(guò)了測(cè)試的重重考驗(yàn)
  • 開(kāi)發(fā)者友好

github地址:https://github.com/go-gorm/gorm

官方文檔:https://gorm.io/zh_CN/docs/index.html

robfig/cron

github地址:https://github.com/robfig/cron

業(yè)務(wù)開(kāi)發(fā)更離不開(kāi)定時(shí)器的使用了,cron就是一個(gè)用于管理定時(shí)任務(wù)的庫(kù),用 Go 實(shí)現(xiàn) Linux 中crontab這個(gè)命令的效果,與Linux 中crontab命令相似,cron庫(kù)支持用 5 個(gè)空格分隔的域來(lái)表示時(shí)間。cron上手也是非常容易的,看一個(gè)官方的例子:

  1. package main 
  2.  
  3. import ( 
  4.   "fmt" 
  5.   "time" 
  6.  
  7.   "github.com/robfig/cron/v3" 
  8.  
  9. func main() { 
  10.   c := cron.New() 
  11.  
  12.   c.AddFunc("@every 1s", func() { 
  13.     fmt.Println("tick every 1 second run once"
  14.   }) 
  15.   c.Start() 
  16.   time.Sleep(time.Second * 10) 

針對(duì)cron的使用可以參考這篇文章:https://segmentfault.com/a/1190000023029219

之前我也寫(xiě)了一篇cron的基本使用,可以參考下:https://mp.weixin.qq.com/s/Z4B7Tn8ikFIkXVGhXNbsVA

wire

都1202年了,應(yīng)該不會(huì)有人不知道依賴(lài)注入的作用了吧。我們本身也可以自己實(shí)現(xiàn)依賴(lài)注入,但是這是在代碼量少、結(jié)構(gòu)不復(fù)雜的情況下,當(dāng)結(jié)構(gòu)之間的關(guān)系變得非常復(fù)雜的時(shí)候,這時(shí)候手動(dòng)創(chuàng)建依賴(lài),然后將他們組裝起來(lái)就會(huì)變的異常繁瑣,并且很容出錯(cuò)。Go語(yǔ)言社區(qū)有很多依賴(lài)注入的框架,可以分為兩個(gè)類(lèi)別:

依賴(lài)反射實(shí)現(xiàn)的運(yùn)行時(shí)依賴(lài)注入:inject、uber、dig

使用代碼生成實(shí)現(xiàn)的依賴(lài)注入:wire

個(gè)人覺(jué)的使用wire進(jìn)行項(xiàng)目管理是最好的,在代碼編譯階段就可以發(fā)現(xiàn)依賴(lài)注入的問(wèn)題,在代碼生成時(shí)即可報(bào)出來(lái),不會(huì)拖到運(yùn)行時(shí)才報(bào),更便于debug。

wire的使用也是非常的簡(jiǎn)單,關(guān)于wire的使用我之前也寫(xiě)了一篇文章,可以參考一下:https://mp.weixin.qq.com/s/Z4B7Tn8ikFIkXVGhXNbsVA

github地址:https://github.com/google/wire

ants

某些業(yè)務(wù)場(chǎng)景還會(huì)使用到goroutine池,ants就是一個(gè)廣泛使用的goroute池,可以有效控制協(xié)程數(shù)量,防止協(xié)程過(guò)多影響程序性能。ants也是國(guó)人開(kāi)發(fā)的,設(shè)計(jì)博文寫(xiě)的也很詳細(xì)的,目前很多大廠也都在使用ants,經(jīng)歷過(guò)線(xiàn)上業(yè)務(wù)檢驗(yàn)的,所以可以放心使用。

github地址:https://github.com/panjf2000/ants

ants源碼不到1k行,建議大家賞析一下源碼~。

總結(jié)

 

本文列舉的幾個(gè)庫(kù)都是經(jīng)常被使用的開(kāi)源庫(kù),這幾個(gè)庫(kù)你都掌握了,基本的業(yè)務(wù)開(kāi)發(fā)都沒(méi)有啥問(wèn)題了,一些初學(xué)者完全可以通過(guò)這幾個(gè)庫(kù)達(dá)到入門(mén)水平。還有一些庫(kù),比如:go-redis、go-sql-driver、didi/gendry、golang/groupcache、olivere/elastic/v7等等,這些庫(kù)也是經(jīng)常使用的,入門(mén)都比較簡(jiǎn)單,就不這里詳細(xì)介紹了。

 

責(zé)任編輯:武曉燕 來(lái)源: Golang夢(mèng)工廠
相關(guān)推薦

2017-11-21 15:34:15

Linux 開(kāi)發(fā)開(kāi)源

2009-06-23 08:10:47

J2EE開(kāi)發(fā)開(kāi)源項(xiàng)目

2024-07-11 11:07:41

2025-01-22 10:33:44

Python庫(kù)大模型

2021-10-11 06:38:52

Go開(kāi)源庫(kù)語(yǔ)言

2021-11-03 15:15:21

Go重構(gòu)技術(shù)

2018-05-10 16:02:48

Android程序贈(zèng)工具

2022-08-30 21:01:17

開(kāi)發(fā)Java框架

2023-03-17 16:49:42

開(kāi)發(fā)Java框架

2010-04-06 16:50:07

Oracle數(shù)據(jù)庫(kù)

2012-08-22 10:44:08

軟件開(kāi)發(fā)

2021-09-02 07:04:44

Go 開(kāi)發(fā)利器

2023-12-14 17:24:20

Linux開(kāi)源項(xiàng)目

2022-06-30 08:31:54

排序函數(shù)SQL

2023-04-11 08:49:42

排序函數(shù)SQL

2009-07-03 16:05:06

JSP開(kāi)發(fā)框架

2022-07-18 08:08:16

Go?語(yǔ)言技巧

2025-04-07 08:21:49

2014-05-13 09:55:13

iOS開(kāi)發(fā)工具

2011-07-10 00:02:39

PHP
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)