最近总有一些初学Go语言的小伙伴问我在业务开发中一般都使用什么web框架、开源中间件;所以我总结了我在日常开发中使用到的库,这些库不一定是特别完美的,但是基本可以解决日常工作需求,接下来我们就来看一下。

Gin

Gin是一个用Go编写的Web框架,它是一个类似于martini但拥有更好性能的API框架。基本现在每个Go初学者学习的第一个web框架都是Gin。在网上看到一个关于对各个Go-web框架受欢迎的对比:

来自网络

我们可以看到Gin在社区受欢迎排第一,Gin 框架往往是进行 Web 应用开发的首选框架,许多公司都会选择采用Gin框架进行二次开发,加入日志,服务发现等功能,像Bilibili 开源的一套 Go 微服务框架 Kratos 就采用 Gin 框架进行了二次开发。

学习Gin通过他的官方文档就可以很快入手,不过文档时英文的,这个不用担心,我曾翻译了一份中文版,可以到我的公众号后台获取,回复【gin】即可获取。

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

zap

zapuber开源的日志库,选择zap他有两个优势:

  • 它非常的快

  • 它同时提供了结构化日志记录和printf风格的日志记录

大多数日志库基本都是基于反射的序列化和字符串格式化的,这样会导致在日志上占用大量CPU资源,不适用于业务开发场景,业务对性能敏感还是挺高的。zap采用了不同的方法,它设计了一个无反射、零分配的 JSON 编码器,并且基础 Logger 力求尽可能避免序列化开销和分配。通过在此基础上构建高级 SugaredLogger,zap 允许用户选择何时需要计算每次分配以及何时更喜欢更熟悉的松散类型的 API。

zap的基准测试如下:

来自官方文档

可以看出zap的效率完全高于其他日志库,选谁不用我明说了吧!!!

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

jsoniter

做业务开发离不开json的序列化与反序列化,标准库虽然提供了encoding/json,但是它主要是通过反射来实现的,所以性能消耗比较大。jsoniter可以解决这个痛点,其是一款快且灵活的 JSON 解析器,具有良好的性能并能100%兼容标准库,我们可以使用jsoniter替代encoding/json,官方文档称可以比标准库快6倍多,后来Go官方在go1.12版本对 json.Unmarshal 函数使用 sync.Pool 缓存了 decoder,性能较之前的版本有所提升,所以现在达不到快6倍多。

来自官方文档

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

对于jsoniter优化原理感兴趣的可以移步这里:http://jsoniter.com/benchmark.html#optimization-used

gorm

gorm是一个使用Go语言编写的ORM框架,文档齐全,对开发者友好,并且支持主流的数据库:MySQL, PostgreSQL, SQlite, SQL Server

个人觉得使用gorm最大的好处在于它是由国人开发,中文文档齐全,上手很快,目前大多数企业也都在使用gorm。我们来一下gorm的特性:

  • 全功能 ORM

  • 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)

  • Create,Save,Update,Delete,Find 中钩子方法

  • 支持 PreloadJoins 的预加载

  • 事务,嵌套事务,Save Point,Rollback To Saved Point

  • Context、预编译模式、DryRun 模式

  • 批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD

  • SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询

  • 复合主键,索引,约束

  • Auto Migration

  • 自定义 Logger

  • 灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…

  • 每个特性都经过了测试的重重考验

  • 开发者友好

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

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

robfig/cron

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

业务开发更离不开定时器的使用了,cron就是一个用于管理定时任务的库,用 Go 实现 Linux 中crontab这个命令的效果,与Linux 中crontab命令相似,cron库支持用 5 个空格分隔的域来表示时间。cron上手也是非常容易的,看一个官方的例子:

package mainimport ("fmt""time""github.com/robfig/cron/v3"
)func main() {c := cron.New()c.AddFunc("@every 1s", func() {fmt.Println("tick every 1 second run once")})c.Start()time.Sleep(time.Second * 10)
}

针对cron的使用可以参考这篇文章:https://segmentfault.com/a/1190000023029219

之前我也写了一篇cron的基本使用,可以参考下:https://mp.weixin.qq.com/s/Z4B7Tn8ikFIkXVGhXNbsVA

wire

1202年了,应该不会有人不知道依赖注入的作用了吧。我们本身也可以自己实现依赖注入,但是这是在代码量少、结构不复杂的情况下,当结构之间的关系变得非常复杂的时候,这时候手动创建依赖,然后将他们组装起来就会变的异常繁琐,并且很容出错。Go语言社区有很多依赖注入的框架,可以分为两个类别:

  • 依赖反射实现的运行时依赖注入:inject、uber、dig

  • 使用代码生成实现的依赖注入:wire

个人觉的使用wire进行项目管理是最好的,在代码编译阶段就可以发现依赖注入的问题,在代码生成时即可报出来,不会拖到运行时才报,更便于debug

wire的使用也是非常的简单,关于wire的使用我之前也写了一篇文章,可以参考一下:https://mp.weixin.qq.com/s/Z4B7Tn8ikFIkXVGhXNbsVA

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

ants

某些业务场景还会使用到goroutine池,ants就是一个广泛使用的goroute池,可以有效控制协程数量,防止协程过多影响程序性能。ants也是国人开发的,设计博文写的也很详细的,目前很多大厂也都在使用ants,经历过线上业务检验的,所以可以放心使用。

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

ants源码不到1k行,建议大家赏析一下源码~。

总结

本文列举的几个库都是经常被使用的开源库,这几个库你都掌握了,基本的业务开发都没有啥问题了,一些初学者完全可以通过这几个库达到入门水平。还有一些库,比如:go-redisgo-sql-driverdidi/gendrygolang/groupcacheolivere/elastic/v7等等,这些库也是经常使用的,入门都比较简单,就不这里详细介绍了。

如果大家也有经常使用的,比较好的开源库,欢迎推荐给我,我也学习学习!!!

本文转载自公众号「Golang梦工厂」,如果喜欢他的文章推荐关注!

几个提升Go业务开发效率的流行框架和开源库相关推荐

  1. 使用 jsDoc 提升我们的开发效率

    使用 jsDoc 提升我们的开发效率 缘起 作为前端开发者目前使用最广泛的编程语言 JavaScript,也是有很多的缺点的!大家都直到 JavaScript 是一个弱类型的编程语言,这就造成了一问题 ...

  2. 2020Android开发常用的开源框架、开源库

    前言 作为一名优秀的程序员,熟练的掌握一些开源框架和开源库,能使你的开发效率倍增,以下是Android开发中比较常用到的开源框架和库. TextView HTextView 一款支持TextView文 ...

  3. 阿里宜搭助力服务中枢升级,提升10倍开发效率

    "真没想到,我在小程序上申请了'要一双拖鞋',不到半分钟功夫,机器人就把拖鞋送来了!"住在菲住布渴的王女士感叹到.在酒店管理和服务能力的建设中,菲住布渴始终致力于通过数字化.智能化 ...

  4. vscode 全项目替换_利用vscode插件提升前端国际化开发效率

    1. 起因 国际化是我们目前开发工作中非常重要的一环.对于老项目,我们可以通过便捷的方式对中文文案进行批量国际化:但是对于新增的功能或者模块开发,一般还是开发同学对文案逐个进行国际化.我自己的开发流程 ...

  5. 谈谈前后端分离实践中如何提升RESTful API开发效率

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取推荐书籍 来源:33h.co/edZR 团队内部RestAPI开发采用设计驱 ...

  6. 如何用 IDEA 提升十倍开发效率?

    工欲善其事,必先利其器.想要提升编程开发效率,必须选择一款顺手的开发工具. JetBrains 公司提供了一系列功能强大.风格统一的开发工具,深受开发者喜爱.其中,IDEA 是面向 Java 开发的专 ...

  7. 使用ShellJS提升你的开发效率(一)

    Shelljs - Unix shell commands for Node.js Shelljs是Node.js下的脚本语言解析器,具有丰富且强大的底层操作(Windows/Linux/OS X)权 ...

  8. 天下武功,唯快不破:后端Java人怎么提升自己的开发效率?

    对一个 Java 后端程序员来说,MyBatis.Hibernate.Data Jdbc 等都是我们常用的 ORM 框架.它们有时候很好用,比如简单的 CRUD,事务的支持都非常棒.但有时候用起来也非 ...

  9. plain framework 1(简约框架)一款主要用于网络(游戏)开发的C/C++框架 即将开源发布...

    在我们的日常开发中,我们往往会遇到这种情况,当我们换了一个开发环境时很可能会重新利用一套新的框架进行开发.由于不同框架有着不同的接口,所以我们不得不花时间再次熟悉这些接口,这将造成开发时间上的重复,而 ...

最新文章

  1. ANSYS配合时如何选择重合面(打开爆炸视图)
  2. Java 负数、零、正数的个数
  3. Xamarin IOS – hello word
  4. 电脑音频服务未运行怎么解决_电脑故障维修技巧教程:新手必看的修电脑技巧!...
  5. qt自定义窗口,其绘制的窗口边框线显示不全
  6. 解决SQL查询总是 超时已过期
  7. UITapGestureRecognizer 的用法
  8. 【180620】小人物走路、奔跑的VC++游戏特效
  9. C#打造一个开源webgis(四)地图客户端(中)
  10. 解决Oracle使用in语句不能超过1000问题
  11. 梅花雨日历控件英文版
  12. ubuntu清空回收站命令
  13. java 车牌号归属地_本地化JavaAnpr用于本地的车牌
  14. MySQL 中的boolean/bool/tinyint(1)表示布尔类型
  15. BD电影搜索-自定义过滤器
  16. 信息系统项目管理师EV、PV、AC、BAC、CV、SV、EAC、ETC、CPI、SPI概念说明
  17. vue垂死挣扎--遇到的问题
  18. 最近使用到的linux一些命令或操作日常记录
  19. CENTOS6.5安装CDH5.12.1(一) https://mp.weixin.qq.com/s/AP_m0QqKgzEUfjf0PQCX-w
  20. [点滴记录]Unable to locate package错误 & gedit中文乱码

热门文章

  1. “一休数学思维”改名“海豚思维”,并完成数千万元Pre-A轮融资
  2. datatable的使用
  3. 惊呆!到2020年三大运营商5G投入将达1800亿美元
  4. DNS(BIND) 正向解析   反向解析 基本服务的搭建
  5. 仿真器和模拟器的区别是什么?
  6. golang并发的一篇文章
  7. SQL Server 2017 AlwaysOn AG 自动初始化(十二)
  8. web安全之SQL注入---第四章 如何进行SQL注入攻击
  9. Android编程权威指南学习:Activity之间传递参数
  10. 一些服务器客户端的c例子