ByteDance青训营--第三课-高质量编程与性能调优

142 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记

注释

  • 应该解释代码作用

    • 适合注释公共符号
    • 适合注释实现过程
    • 适合解释代码的外部因素
    • 提供额外上下文
  • 应该解释代码什么情况会出错

    • 适合注释代码的限制条件
  • 公共符号始终要注释

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

编码规范-

控制流程

  • 避免嵌套
  • 尽量保持正常代码路径为最小缩进

错误和异常处理

  • 简单错误

    • errors.New()
    • 格式有要求使用 fmt.Errorf()
  • 错误的Wrap和Unwrap

    • 错误的Wrap实际上是提供了一个error 嵌套另一个error的能力,从而生成了一个error的跟踪链
    • 在fmt.Errorf中使用:%w 关键字来将一个错误关联至错误链中
  • 错误判定

    • 判定一个错误是否为特定错误,使用errors.ls
    • 不同于使用== 使用该方法可以判定错误链上的所有错误是否含有特定的错误
    • 在错误链上获取特定种类的错误,使用errors.As
  • panic

    • 不建议在业务代码中使用panic
    • 调用函数不包含recover会造成程序崩溃
  • recover

    • recover只能在被defer的函数中使用
    • 嵌套失效
    • 只在当前goroutine
    • defer 的语句是后进先出

性能优化建议

  • Benchmark

    • go test -bench=. -benchmen
  • slice预分配内存 尽可能提供容量

  • Map 预分配

  • 字符串处理

  • 使用空结构体节省内存

    • 使用strings.Builder 来实现字符串拼接
  • atomic包