这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
1.本堂课重点内容
Go语言高质量编程和Go调优实战
2.详细知识点介绍
2.1 高质量编程
编写的代码能够达到正确可靠、简介清晰的目标可以称之为高质量代码。从以下几方面出发,我们可以编写高质量的代码:
-
代码格式。首先是推荐使用gofmt自动格式化代码,保证所有的Go代码与官方推荐格式保持一致,而且可以很方便进行配置,向Goland内置了相关功能,直接开启就可以在保存文件的时候自动格式化。
-
简介。首先是注释应该解释代码作用,这种注释适合说明公共符号,比如对外提供的函数注释描述它的作用和用途,只有函数的功能简单而明显的时候才能省略这些注释。另外注释的内容要避免啰嗦,不要对显而易见按的内容进行说明。其次,注释可以解释代码的外部因素,这些元素脱离上下文后通常很难理解。最后,注释应该提醒使用者一些潜在的限制条件或者会无法处理的情况。
-
命名规范。无论是变量命名还是函数命名都希望能够简洁清晰。总体来说,命名的核心在于减低阅读理解代码的成本。
-
控制流程。首先是避免嵌套,从最简单的一个if else条件开始,如果两个分支都包含return语句,则可以去除冗余的else语句,方便后续维护,else一般是正常流程,如果需要在正常流程新增判断逻辑,避免负值嵌套。其次是线性原理,处理逻辑尽量走线性,避免复杂的嵌套分支。
-
在程序实际运行中,通常会遇到错误或者异常情况,这时候就需要进行异常处理了。首先是简单错误,简单错误指的是仅出现一次的错误,而且在其他地方不需要捕获该错误,优先使用errors.New来创建匿名变量来直接表示简单错误。对于复杂的错误,有时候并不能简单描述,这时候可以使用错误的包装。错误的包装提供了一个error嵌套另一个error的能力,生成一个error的跟踪链,同时结合错误的判定方法来确认调用链中是否游戏关注的错误的出现。在Go中,比错误更严重的就是panic,它的出现表示程序无法正常工作了。但不建议在业务代码中使用panic,因为其发生之后,会向上传播至调用栈顶,如果当前goroutine中所有deferred函数都不包含recover就会造成整个程序崩溃。
2.2 性能优化
高质量的代码能够完成功能,但是在大规模程序部署的场景,仅仅支持正常功能还不过,我们还需要尽可能的提高性能,节省资源成本,接下来就介绍性能相关的建议。
在介绍具体建议之前,我们可以使用benchmark来评估性能。(1.17日常挖坑,争取明天继续补充)