golang 数据库框架_关于Golang框架和外部库的神话

golang 数据库框架

我已经将Go投入生产已经有一段时间了,非常享受它的快速和可靠。 较小的构建体大小,go例程提供的并发性以及您可以直接在机器上运行构建体的事实使Golang变得非常可爱。

标准软件包的性能如此之好,以至于您可以创建可用于生产环境的微服务,而无需任何外部库或框架。 但这并不意味着Go中没有提供更大灵活性或更快速度的框架,它们根本不是首选。

如果您向Go开发人员询问可以使用哪些Web框架或库,通常的答案是坚持使用标准库。 具有讽刺意味的是,“ golang框架”在google中的搜索结果最高是关于为什么不应该使用它们的原因。

有关HN上Go框架的问题的最高评论

我对标准库的替代方案进行了一些研究,以了解它们的性能并对其进行基准测试。 我将它们归类为微服务的基本组成部分。

所有基准测试均在以下配置上执行。 尽管标准基准时间仅为1s ,但我将所有测试运行了10s以使每个测试的周期保持一致。

Processor  - 2.7 GHz Intel Core i7
RAM - 16GB - 16 GB 2133 MHz LPDDR3
OS - MacOS High Sierra
go version  - go1.11.1
Bench Time 10s instead of standard 1s
go test -bench=. -benchtime=10s
路由

标准的http Go服务器提供了一个不错的路由器,该路由器可以读取查询参数,但无法读取命名参数,例如,

/students/:studentID/grades/:gradeID

任何具有上述嵌套资源的REST服务都必须已经使用外部路由库来解析它们。 杜松子酒,回音,比戈,大猩猩混蛋,枸杞是一些受欢迎的食物(根据他们的Github追随者)。
其中一些是功能完善的中间件框架,该框架也可以进行路由,而另一些只是路由库。

我针对这些库针对单个命名参数运行了基准测试,以下是结果。 Gin拥有最快的路由器,其次是Echo。

JSON序列化和反序列化

一旦API请求通过路由器命中并传递到控制器或处理程序,下一步就是在返回响应的同时对请求JSON或Encode进行解码。

Go有一个非常不错的encoding包,它支持json, XML, csv等多种格式,但是快速浏览一下替代方案就会发现大量的库。 我根据标准的encoding/json包对Jsoniter,EasyJson进行了基准测试,结果如下。

以下是编码结果,结果表明性能差异不明显。

但是对于解码JSON, jsoniter执行速度比标准编码包快5倍。

现在,如果您的请求已解码,则下一步可能是应用您的业务逻辑,并且可能需要执行一些数据库操作。

ORM与否?

大多数流行语言都依赖于框架来构建与数据库交互的微服务。 在Java世界中处于Hibernate状态,Active Record for Rails和Django ORM非常流行。 ORM的(对象关系映射器)有时有助于更好地处理事务,表之间的关系,并有助于避免编写用于简单联接的复杂SQL。

但是Go又有了一个非常好的database标准库,这使连接到关系数据库变得非常容易,而且速度也非常快。 但是,一个痛点是查询。 查询某些行时,必须手动映射行中的每个字段,然后将它们分配给struct 。 这可行,但很快就会变得混乱,使您编写很多代码。 sqlx是一个库,它使您可以将整行扫描到struct变量中。

尽管sqlx减少了编写用于构建CRUD的典型行数,但您仍然会多次写重复代码。 使用ORM可以减少它,并专注于您的业务逻辑。

我对database, database + sqlx, gorm , go-pg基准测试database, database + sqlx, gorm , go-pg用于查询,下面是结果。 出人意料的是, go-pg ,一个ORM进行比标准包快,甚至sqlx 。 GORM虽然在生态系统中非常有名,却相对较慢。

从Postgres DB查询20万条记录

在API调用的每个步骤中,都有更好的框架或外部库,这些框架或外部库将使您的响应速度更快,并提供一定的灵活性。

注意事项

尽管在速度上有一些改进是显而易见的,但仅此一个原因不应成为脱离标准库的原因。 应该考虑诸如测试代码的难易程度,对开源库的长期维护,对团队的学习曲线之类的事情。

尽管如此,我认为诸如echo + jsoniter + go-pg以及Go标准库的所有echo + jsoniter + go-pg功能将是构建微服务并避免冗余代码的最快方法。

请随时分享您对Go库的想法和经验。

翻译自: https://hackernoon.com/the-myth-about-golang-frameworks-and-external-libraries-93cb4b7da50f

golang 数据库框架

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值