高质量编程简介及编码规范| 青训营

78 阅读2分钟

高质量编程

什么是高质量

1.各种边界条件是否考虑完备 2.异常情况处理,稳定性保证 3.易读易维护

编程原则

1.简单性(消除“多余的复杂性”) 2.可读性(代码写给人看) 3.生产力(团队整体工作效率)

编码规范

代码格式

公共符号始终要注释

①包中声明的每个公共的符号变量、常量、函数以及结构都需要添加注释 ②任何既不明显也不简短的公共功能必须予以注释 ③无论长度或复杂程度如何对库中的任何函数都必须进行注释

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

注释

常见注释应该做的

注释应该解释代码作用(注释公共符号) 注释应该解释代码如何做的(注释实现过程) 注释应该解释代码实现的原因(解释代码的外部因素) 注释应该解释代码什么情况会出错(解释代码的限制条件)

命名规范

1.简洁胜于冗长

2.缩略词全大写,但当其位于变量开头且不需要导出时,使用全小写 例如使用 ServeHTTP 而不是 ServeHttp 使用 XMLHTTPRequest 或者 xmIHTTPRequest

3.变量距离其被使用的地方越远,则需要携带越多的上下文信息 全局变量在其名字中需要更多的上下文信息,使得在不同地方可以轻易辨认出其含义

核心目标是降低阅读理解代码的成本

重点考虑上下文信息,设计简洁清晰的名称

控制流程

1.避免嵌套,保持正常流程清晰 如果两个分支都包含return语句,则可去除冗余的else

//bad
if foo{
    return x
}else{
	return nil
}

//good
if foo{
    return x
}
return nil

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

优先处理错误情况/特殊情况,尽早返回或继续循环来减少嵌套

错误和异常处理

简单错误

简单的错误指的是仅出现一次的错误,且在其他地方不需要捕获该错误

优先使用 errorsNew 来创建匿名变量来直接表示简单错误

如果有格式化的需求,使用 fmt.Errorf

错误的 Wrap 和 Unwrap

错误的 Wrap 实际上是提供了一个 error 嵌套另一个error 的能力,从而生成一个 error 的跟踪链

fmt.Errorf 中使用: %w 关键字来将一个错误关联至错误链中

错误判定

在错误链上获取特定种类的错误,使用errors.As

recover

recover 只能在被 defer 的函数中使用嵌套无法生效

只在当前 goroutine 生效

defer 的语句是后进先出