高质量编码与性能调优 | 青训营笔记

86 阅读2分钟

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

高质量代码的衡量标准

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

编写高质量Go代码的要点

代码格式

可使用gofmt、goimport工具统一代码风格并进行依赖包管理

注释

注释要实现的要点:
注释应该解释代码作用
注释应该解释代码是如何做的
注释应该解释代码实现的原因
注释应该解释代码什么情况会出错

命名规范

要义:简洁但准确表示含义或功能
要点:可降低阅读理解代码的成本,重点考虑上下文信息,设计简洁清晰的名称

控制流程

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

错误和异常处理

优先使用errors.NEW来创建匿名变量来直接表示简单错误,有格式化要求的可使用fmt.Errorf 当程序启动阶段发生不可逆转的错误时,可以在init或main函数中使用panic,当问题可被解决或屏蔽时不建议使用。

性能优化

可使用Go语言提供的基准性能测试的benchmark工具进行基准性能测试

slice处理

slice在初始化时带有信息容量可减少初始化时的资源开支
当在原有大切片的基础上新建小切片后原有底层数组因在内存中有引用而得不到释放可用copy替代re-slice
如:

func GetLastBySlice(origin []int) []int{
    return origin[len(origin)-2:]
}
func GetLastByCopy(origin []int) []int{
    result:=make([]int,2)
    copy(result,origin[len(origin)-2:])
    return result
}
字符串处理

使用strings.Builder,bytes.Buffer,strings.Buffer替代"+"拼接字符串

互斥锁使用优化

针对逻辑十分简单的操作可用atomic替代lock(),unlock()操作

性能调优

使用pprof工具进行性能分析 分析性能数据,定位性能瓶颈