高质量代码 | 青训营笔记

67 阅读2分钟

单元测试

func TestXxx(t *testing.T){
}

main 函数为:

 func TestMain(m *Testing.M){
//数据、配置初始化
code:= m.Run()
//资源释放等
}

test覆盖率

Mock 测试(如果有外部依赖)

基准测试 并行基准测试

Benchmarkxxx(b *testing.B){}

代码是最好的注释

注释作用、(原理)、以及 原因(比如脱离上下文就无法理解),还没解决的bug或者在什么情况下会出错

全局信息等(比如公共符号、变量)比较重要或者远离使用位置的时候最好要保留信息

高质量代码

命名规范:

简介避免重复,比如:

time.Now()
time.Nowtime()

选择第一种就很好,下面的第一种就很好,说明了这个time作用是deadline

image-20230119120838336

注意package包名不要与标准库重复,可以在不破坏语义的情况下简写,比如:format 可以简写为 fmt

合理嵌套,能最先找出退出条件的放在前面,保证if语句的可读性(有必要学习一下)

image-20230119121258467image-20230119121313107

错误的包装提供了一个error嵌套另一个error的能力,生成一个error的跟踪链,同时结合错误的判定方法来确认调用链中是否有关注的错误出现。这个能力的好处是每一层调用方可以补充自己对应的上下文,方便跟踪排查问题,确定问题的根本

判断错误是否属于某种错误,使用errors.is

在错误链上获取特定的错误,使用errors.as

不建议使用panic,担当程序启动发生不可逆转的错误时候,可以在init或者main函数中使用

了解一下recover

编写规范:

gofmt自动格式化代码

考虑goimports,会对依赖包进行管理,自动增删依赖的包引用,按字母序排序分类,具体可以根据团队实际情况配置使用

性能测试

性能基准测试工具: benchmark 可以使用go test -bench = .-benchmem

如何在后端调试是个关键,我们不需要考虑前端

image-20230128230212820

:a:go.mod 管理工具包,可以去copy他的包的内容,不需要,队长已经解决

Error 1146 (42S02): Table 'ttt.user_infos' doesn't exist

云原生下开发

image-20230202215058905

单元测试最重要

image-20230202215130509

认识了后端开发的一周

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