高质量编码 | 青训营笔记

80 阅读2分钟

高质量编码 | 青训营笔记

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

文章简介

  • 如何编写简洁清晰的代码
  • 常用Go程序优化手段

如何编写简洁清晰的代码

高质量代码

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

注释应该做什么

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

代码是最好的注释,注释以哦那个该提供代码未表达出的上下文信息。

变量-命名规范

  • 简洁胜于冗长
  • 缩略词全大写,但当期位于变量开头且不需要导出的时候,需要小写
  1. 例如使用ServeHTTP而不是ServeHttp
  2. 使用XMLHTTPRequest或者xmlHTTPRequest
  • 变量距离其被使用的地方越远,则需要携带越多的上下文信息
  1. 全局变量在其名字中需要更多的上下文信息,使得在不同地方可以轻易辨认出其含义

函数-命名规范

  • 函数名不携带包名的上下文信息,因为包名和函数名总是承兑出现的
  • 函数名尽量简短
  • 当名未foo的包某个函数返回类型Foo时,可以省略类型信息而不导致歧义
  • 当名未foo的包某个函数返回类型T(不是Foo)时,可以在函数名中加入类型信息

包名-命名规范

  • 只由小写字母组成。不包含大写字母和下划线等字符
  • 简短并包含一定上下文信息
  • 不要与标准库同名

控制流程

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

屏幕截图_20230124_192816.png

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

屏幕截图_20230124_192828.png

屏幕截图_20230124_192850.png

简单错误-错误与异常处理

  • 简单的错误指的是仅出现一次的错误,且在其他地方不需要捕获该错误
  • 有限使用errors.New来创建匿名变量来直接表示简答错误
  • 如果有格式化要求,使用fmt.Rrrorf

屏幕截图_20230124_193507.png

错误的Wrap和Unwrap

屏幕截图_20230124_193738.png

错误判定

屏幕截图_20230124_193824.png

panic

屏幕截图_20230124_193852.png

recover

屏幕截图_20230124_193914.png