如何写出优雅的 Go 语言代码

Go qloog · 2020年04月30日 · 386 次阅读


GO阅读: 如何写出优雅的 Go 语言代码

在这篇文章中从三个方面分别介绍了如何写优雅的 Go 语言代码,作者尽可能地给出了最容易操作和最有效的方法:

  • 1、 代码规范:使用辅助工具帮助我们在每次提交 PR 时自动化地对代码进行检查,减少工程师人工审查的工作量;

  • 2、最佳实践

    • 目录结构:遵循 Go 语言社区中被广泛达成共识的 目录结构,减少项目的沟通成本;

    • 模块拆分:按照职责对不同的模块进行拆分,Go 语言的项目中也不应该出现 model、controller 这种违反语言顶层设计思路的包名;

    • 显示与隐式:尽可能地消灭项目中的 init 函数,保证显式地进行方法的调用以及错误的处理;

    • 面向接口:面向接口是 Go 语言鼓励的开发方式,也能够为我们写单元测试提供方便,我们应该遵循固定的模式对外提供功能;

      • 使用大写的 Service 对外暴露方法;
      • 使用小写的 service 实现接口中定义的方法;
      • 通过 func NewService(…) (Service, error) 函数初始化 Service 接口;
  • 3、 单元测试:保证项目工程质量的最有效办法;

    • 可测试:意味着面向接口编程以及减少单个函数中包含的逻辑,使用『小方法』;

    • 组织方式:使用 Go 语言默认的 Test 框架、开源的 suite 或者 BDD 的风格对单元测试进行合理组织;

    • Mock 方法:四种不同的单元测试 Mock 方法;

      • gomock:最标准的也是最被鼓励的方式;
      • sqlmock:处理依赖的数据库;
      • httpmock:处理依赖的 HTTP 请求;
      • monkey:万能的方法,但是只在万不得已时使用,类似的代码写起来非常冗长而且不直观;
    • 断言:使用社区的 testify 快速验证方法的返回值;

想要写出优雅的代码本身就不是一件容易的事情,它需要我们不断地对自己的知识体系进行更新和优化,推倒之前的经验并对项目持续进行完善和重构,而只有真正经过思考和设计的代码才能够经过时间的检验(代码是需要不断重构的),随意堆砌代码的行为是不能鼓励也不应该发生的,每一行代码都应该按照最高的标准去设计和开发,这是我们保证工程质量的唯一方法。

作者也一直在努力学习如何写出更加优雅的代码,写出好的代码真的不是一件容易的事情,作者也希望能通过这篇文章帮助使用工程师写出更有 Go 语言风格的项目。


Reference
- https://github.com/bingoohuang/blog/issues/84