Note02 高质量编程与性能调优实践(上) | 青训营

107 阅读5分钟

简介:

高质量编程是一种追求编写高质量代码的开发方法和思想。它强调代码的正确性、可靠性、可读性和可维护性,以及良好的性能和效率。

在高质量编程中,开发人员注重以下几个方面:

  1. 正确性:高质量代码能够正确地完成预期的功能,并且能够处理各种边界条件和异常情况。

  2. 可靠性:高质量代码具有良好的稳定性和健壮性,能够在各种环境和条件下运行,并且不容易出现崩溃或错误。

  3. 简洁清晰:高质量代码具有简洁明了的结构和逻辑,不含有冗余或复杂的代码。它能够通过良好的命名和注释使其易于理解和维护。

  4. 可读性:高质量代码易于阅读和理解,使其他开发人员能够快速理解其意图和功能,并且能够轻松地进行修改、扩展或重构。

  5. 可维护性:高质量代码易于维护,包括添加新功能、修复错误、进行性能优化等。它具有良好的模块化和封装性,使得修改一部分代码不会影响其他部分。

  6. 性能效率:高质量代码具有良好的性能和效率,能够在合理的时间内完成任务,并且不会浪费资源或造成性能瓶颈。

总之,高质量编程不仅仅是一种技术层面上的追求,它还需要开发人员具备良好的编程习惯、团队合作能力和对软件工程的理解。通过编写高质量代码,开发人员可以提高开发效率、降低维护成本,并且为项目的成功做出贡献。

编程原则

实际应用场景千变万化,各种语言的特性和语法各不相同,但是高质量编程遵循的原则是相同的。

简单性

  • 消除“多余的复杂性”,以简单清晰的逻辑编写代码
  • 不理解的代码无法修复改进

可读性

  • 代码是写给人看的,而不是机器
  • 编写可维护代码的第一步是确保代码可读

生产力

  • 团队整体工作效率非常重要

编码规范:

  • 代码格式
  • 注释
  • 命名规范
  • 控制流程
  • 错误和异常处理

代码格式

代码各种能统一的话,团队之间合作就能把关注点放在具体的逻辑上,提高效率。

推荐使用gofmt自动格式化代码

gofmt

Go语言官方提供的工具,能自动格式化Go语言代码为官方统一风格,常见IDE都支持方便的配置

goimports

也是Go语言官方提供的工具,实际等于gofmt加上依赖包管理,自动增删依赖的包引用、将依赖包按字母序排序并分类。

注释

  • 公共符号始终要注释

  • 包中声明的每个公共的符号:变量、常量、函数以及结构都需要添加注释。这些注释应该解释代码的作用、如何实现以及实现的原因。此外,还应该解释代码可能出现的错误情况,以提供使用者在使用过程中的注意事项。

  • 对于公共的常量、函数等符号,如果通过其名称就能够明确其作用,可以不加注释。

  • 对于实现逻辑复杂、调用函数功能不明显的代码,应该添加注释,解释其实现过程和逻辑。

  • 解释代码实现的原因是为了提供额外的上下文,让其他开发人员知道为什么这样实现,以便在后续维护代码时能够更好地理解。

  • 同时,注释还应该解释代码可能出现的错误情况,以提醒使用者注意避免错误的发生。

  • 通过注释代码,可以使其他开发人员更快地理解代码的含义和功能,提高代码的可读性和可维护性。

命名规范

命名规范的核心目标是降低阅读理解代码的成本,重点考虑上下文信息,设计简洁清晰的名称。

  • 在命名变量时,应该尽量保持简洁而不冗长。可以使用缩略词,缩略词应该使用全大写,但当缩略词位于变量开头且不需要导出时,可以使用全小写。
    例如,应该使用"ServeHTTP"而不是"ServeHttp",使用"XMLHTTPRequest"或者"xmlHTTPRequest"
  • 另外,变量距离其被使用的地方越远,就需要携带更多的上下文信息。这意味着在命名变量时,应该考虑到变量在不同地方的使用情况,以便其他开发人员能够轻松辨认出其含义。

  • 对于全局变量,应该在其名字中提供更多的上下文信息,以便在不同地方能够轻松辨认出其含义。这样可以避免全局变量的混淆和错误使用。

函数命名规则:

  1. 函数名不包含包名的上下文信息,因为包名和函数名总是成对出现的。
  2. 函数名应尽量简短,清晰明了。
  3. 当某个函数名为"foo"的函数返回类型为"Foo"时,可以省略类型信息而不会引起歧义。
  4. 当某个函数名为"foo"的函数返回类型为"T"时(而不是"Foo"),可以在函数名中加入类型信息。

函数名的例子:

  1. add - 一个简单的函数,用于将两个数字相加。
  2. calculateAverage - 一个函数,用于计算一组数字的平均值。

包名命名规则:

  1. 包名只由小写字母组成,不包含大写字母和下划线等特殊字符。
  2. 包名应该简短,并包含一定的上下文信息,例如"schema"、"task"等。
  3. 避免与标准库同名,例如不要使用"sync"、"strings"等。

以下是函数和包名的例子:

包名的例子:

  1. database - 一个用于处理数据库操作的包。
  2. httpserver - 一个用于创建和管理HTTP服务器的包。