Go Tool: (exploring) sqlc (Part 1)

227 阅读3分钟

当使用PostgreSQL作为持久性数据存储时,它与加快我们的开发(和测试!)工作流程有关。就背景而言,我们已经成功地使用了database/sqljmoiron/sqlx,两者都能完成工作,但我一直在努力寻找更好的工具来改进我们的工作。我已经做了几个月的调查,我确实找到了一些软件包和工具,但由于选择太多,我还没有真正有时间去尝试它们。最后,我所寻找的是一些工具/软件包。

  • 与PostgreSQL很好地整合,并且
  • 避免过多的魔法reflect-based ORMs被排除在画面之外)。

说了这么多......我从Johan Brandhorst-Satzkorn那里得到了这些问题的答案,特别是在 "A Journey to Postgres Productivity with Go"的演讲中,Johan提到了以下五个工具/包。

  • jackc/pgx Go的PostgreSQL驱动和工具箱

    这个驱动已经出现在我的视线中好几个月了,实际上我在博客系列 "在Go中实现复杂的管道"中使用了它。关于pgx ,最酷的是它还实现了database/sql 中定义的接口类型,所以替换我们现有的(使用 lib/pq),从理论上讲,应该不是那么困难。

  • golang-migrate/migrate 数据库迁移。CLI和Golang库。

    我们已经使用这个包有一段时间了,简单而强大,它满足了我们的需求。

  • kyleconroy/sqlc 从SQL生成类型安全的Go

    这是我在调查过程中发现的工具之一,它给人的第一印象很好,因为它很好地与PostgreSQL集成,并允许你通过类型安全的Go与你的模式互动,然而它确实缺乏一些我们有时需要的动态

  • Masterminds/squirrel 用于golang的流畅SQL生成器

    这是我在探索替代方案时发现的另一个包,它看起来不错,但有一点神奇;但它确实回答了我在阅读sqlc 后的问题,这个包提供了我们需要的动态性

  • ory/dockertest 编写更好的集成测试!Dockertest帮助你用最少的工作为你的Go测试启动热的docker镜像

    我相信我以前听说过这个,但我以前从来没有机会使用它,然而就在最近,我开始把它添加到我们的项目中,它似乎很好用。它确实删除了GitlabCI中用于启动运行测试所需服务的额外模板。更重要的是,它在代码中定义了实际的服务需求,如果需要,任何团队成员都可以参考实际代码在本地运行docker容器。

最后,关于这5个工具/包,重要的是它们是如何整合的,以及如何改进(或不改进)我们目前的工作流程;特别是关于sqlc ,我发现它真的很容易整合,到目前为止没有真正的担忧或抱怨。做出关于在流程中添加新步骤或添加新工具的决定总是需要时间的,所以尽管我喜欢我目前所看到的关于sqlc ,我仍然在探索它如何与我们所有的其他需求相结合,特别是仪器(通过NewRelic)和错误细节,到目前为止,目前的版本仍然默认使用database/sqllib/pq 的组合,所以也是如此。

结论

我将继续探索sqlc ,以及上面提到的其他工具/包,我还在研究的另一件事是类似于 factory_bot来加快测试PostgreSQL相关方法时所需的默认值的速度。

更多精彩内容,敬请期待。