这是我参与「第五届青训营 」笔记创作活动的第2天
高质量编程
- 高质量:编写的代码能够达到准确可靠、简洁清晰的目标
- 各种边界条件是否考虑晚辈
- 异常情况处理,稳定性保证
- 易读易维护
- 编程原则
实际应用场景千变万化,各种语言的特性和语法各不相同,但是高质量编程遵循的原则是相通的
- 简单性:消除“多余的复杂性”,以简单清晰的逻辑编写代码;不理解的代码无法修复改进
- 可读性:代码是给人看的,不是给机器看的;编写可维护代码的第一步是确保代码可读
- 生产力:团队整体工作效率非常重要
- 编码规范
- 代码格式
- gofmt自动格式化代码
- goimports=gofmt+依赖包管理
- 注释:公共符号始终要注释,解释代码作用、代码是如何做的、代码出现原因,提供代码未表达出的上下文信息
- 命名规范:降低阅读理解成本,考虑上下文信息,设计简洁清晰的名称
- 控制流程
- 避免嵌套,保证正常流程清晰
- 优先处理错误情况/特殊情况
- 错误和异常处理
- 优先使用errors.New创建匿名变量直接表示简单错误,如有格式化要求,使用fmt.Errorf;
- 复杂的错误使用Wrap和UnWarp
- 判断一个错误是否为特定错误, errors.ls
- 在错误链上获取某种特定类型的错误,errors.As
- 发生不可逆转的错误时,使用Panic(不建议在业务代码中用)
- 在发生错误时,获取错误信息,recover
- 代码格式
性能调优
性能优化的前提是满足正确可靠、简洁清晰等质量因素,性能优化是综合评估,有时时间效率和空间效率可能对立
- 性能优化建议
- Benchmark:性能测试工具
- Slice:预分配内存
- 尽可能在make()初始化切片时提供容量信息
- 大内存未释放:使用copy代替re-slice
- map预分配内存
- 使用strings.Builder处理字符串拼接等操作
- 使用空结构体节省内存,例如用map实现set
- 多线程形况下使用atomic包进行原子操作,效率比锁高
- 性能调优原则
- 要依靠数据而不是猜测
- 定位最大瓶颈而不是细枝末节
- 不要过早优化
- 不要过度优化
- 性能分析工具 pprof