Go语言高质量编程简介以及编码规范学习笔记 | 青训营

52 阅读2分钟

看完了张雷老师的《Go语言高质量编程简介以及编码规范》视频,有一些点感觉很有收获,在此发个文章记录一下。

panic 和 recover

在Go中,panic 和 recover是异常处理的机制。当程序出现无法逆转的错误时,使用panic。在处理真正异常的情况时,也使用panic。在其他情况下,使用error。尽早暴露错误,以便尽早解决它们。在使用recover时要注意它的范围和限制条件。

defer语句是后进先出的机制,在函数返回之前调用。recover用于记录panic的上下文信息,以便排查和定位问题。

命名

命名应该简洁明了,避免使用缩写。函数名称应该以函数的功能命名,包括参数和返回值的类型。避免使用单字符名称。避免使用混淆的名称。

单元测试

单元测试应该是幂等的,即多次运行结果应该相同。在测试中使用t.Helper()可以将错误定位到调用方。在测试中使用t.Run()可以方便地组合测试用例。

错误处理

错误处理应该在代码中明确处理,而不是忽略错误。错误应该在函数的顶部定义,以便于查看。使用errors.New()或fmt.Errorf()创建错误。避免在循环中使用defer。

接口设计

接口应该是精简的,只包含必要的方法。对于单个实现的接口,可以在实现的包的顶部定义接口。对于多个实现的接口,可以在独立的包中定义接口。

并发

在Go中,goroutine是并发编程的基本单位。避免使用共享变量。避免死锁。优先使用sync.Mutex。使用sync.RWMutex时要注意锁定的粒度。

函数

函数应该短小精悍,只做一件事情。函数参数应该避免使用bool类型。避免使用全局变量。

结构体

结构体应该是不可变的。避免使用指针类型的结构体。避免使用struct{}作为空结构体。

数组和切片

切片应该是可变的。避免在循环中使用append。避免在循环中使用切片。

map

map应该使用make()初始化。在使用delete()时要注意判断键是否存在。

defer

defer语句应该在函数内部定义。defer语句应该在函数返回之前调用。

总结

本文总结了一些Go编码规范的最佳实践,包括panic和recover、命名、单元测试、错误处理、接口设计、并发、函数、结构体、数组和切片、map和defer等方面的内容。这些规范可以帮助开发人员写出更加健壮、可维护和可扩展的代码,从而提高代码质量和开发效率。