[ Go高质量编程简介及性能调优 | 青训营笔记 ]

53 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天,今天的学习内容可能在前面一些概念性的介绍的原则规范还能听懂,到后面性能优化就听的很懵逼了。

Go高质量编程简介及性能调优:

编程原则: 实际应用场景千变万化,各种语言的特征和语法各不相同 但是高质量编程遵循的原则是相通的 什么是高质量: 编写的代码能够达到正确可靠、简洁清晰的目标。 简单性: 消除多余的复杂性,以简单清晰的逻辑编写代码 不好理解的代码无法修复改进 可读性: 代码是写给人看的,而不是机器 编写可维护代码的第一步是确保代码可读 生产力: 团队整体的工作效率非常重要

编码规范: 代码格式:推荐使用gofmt自动格式化代码 注释应该解释代码作用 注释应该解释代码如何做的 注释应该解释代码实现的原因 注释应该解释代码什么情况会出错 公共符号始终要注释

命名规范:
 简洁胜于冗长
 缩略词全大写,但当期位于变量开头且不需要导出时,使用全小写
 (例如使用 ServerHTTP 而不是 ServerHttp,使用 XMLHTTPRequest 或是 xmlHTTPRequest 而不是 XmlHttpRequest
 变量距离其被使用的地方越远,则需要携带越多的上下文信息(尤其是全局变量)
 函数名不携带包名的上下文信息且尽量简短
 package名只由小写字母组成: 
 只由小写字母组成。不包含大写字母和下划线等字符;
 简短并包含一定的上下文信息;
 不要和标准库同名。
 不使用常用变量名作为包名。例如使用 bufio 而不是 buf;
 使用单数而不是复数。例如使用 encoding 而不是 encodings;
 谨慎的使用缩写。例如使用 fmt 在不破坏上下文的情况下比 fotmat 更简短
 
控制流程:
 避免嵌套,保持正常流程清晰,例如去掉不必要的else
 尽量保持正常代码路径为最小缩进,能对称就对称
 故障问题的大多出现在复杂的条件语句和循环语句中,尽量化简

错误和异常处理:
 对于简单错误(仅出现一次,在其他地方不需要捕获),优先使用 errors.New 创建匿名变量直接表示;如有格式化需求,使用 fmt.Errorf;
 在 fmt.Errorf 中使用 %w 将一个错误关联至错误链中;
 使用 errors.Is 判定一个错误为特性错误,比起直接使用 == 的好处是可以判断错误链上的所有错误是否含有特定错误;
 使用 errors.As 获取错误链上特定种类的错误;
 只有在程序启动阶段发生不可逆转的错误时才使用 panic(类似于 Java java.lang.Error 的地位,但是 Go 可以使用 revover 语句来从 panic 中恢复;

性能优化建议: 性能优化的前提是满足正确可靠、简洁清晰等质量因素 性能优化是综合评估,有时候时间效率和空间效率可能对立,所谓时间换空间空间换时间