高质量编程 | 青训营笔记

71 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天

在实际的开发中,团队协作是必不可少的。好的代码可以提高团队工作的效率,同时降低出现问题的概率。因此本文将介绍关于Go的高质量编程的内容。

编程原则

  • 简单性:以简单清晰的逻辑编写代码,复杂的代码更难以维护
  • 可读性:确保代码可读,方便日后对代码的维护
  • 生产力:注重团队整体工作,保证团队格式的统一

编码规范

  • 代码格式

gofmt:Go语言官方提供的工具,能自动格式化Go语言代码为官方统一风格
goimports:Go语言官方提供的工具,在gofmt的基础上还能自动增删依赖的包引用、将依赖包按字母序排序并分类

  • 注释规则

公共符号需要注释代码作用

实现过程需要注释代码如何做的

代码逻辑含有外部因素时需要注释代码实现的原因

有关代码限制条件时需要注释代码在什么情况下出错

  • 命名规范
  • 变量:

缩略词全大写,但当其位于变量开头且不需要导出时,使用全小写

变量距离其被使用的地方越远,则需要携带越多的上下文信息

  • 函数:

函数名不需要携带包名的上下文信息

函数名应尽量简短

函数返回类型与包名一致时可省略类型信息

  • 包:

只由小写字母组成

简短并包含一定上下文信息

不能与标准库同名

不适用常用变量名作为包名

使用单数而不是复数

谨慎使用缩写

  • 控制流程

避免嵌套,保持正常流程清晰

尽量保持正常代码路径为最小缩进

线性原理,处理逻辑尽量走直线

  • 错误和异常处理
  • 简单错误:

优先使用errors.New来创建匿名变量来直接表示

fmt.Errorf可以格式化输出错误

  • 错误跟踪链:

Wrap:提供了一个error嵌套另一个error的能力,由此形成一个跟踪链。在fmt.Errorf中使用%w来将一个错误关联进错误链e.g. fmt.Errorf("err:",err)

Unwrap:用于忽略对于错误信息进行的扩展

**errors包的详细内容可在”Go语言基础语法(二) | 青训营笔记“中查看

  • panic:

在程序启动阶段发生不可逆转的错误时,可以在init或main函数中使用panic

  • recover:

只能在被defer的函数中使用

嵌套无法生效

只在当前goroutine生效

总结

编码规范能提高代码的质量。我印象最深刻的是控制流程部分,在学校的日常编码中我们大多关注的是写出函数实现功能,而对于函数内部的执行顺序没有深究,这可能导致程序逻辑变得复杂,以至于一段时间之后再去看那段代码自己都难以理清逻辑。总而言之,在之后的编码中我将更多的注意编码的规范,提高自己的代码质量。