基础应用场景千变万化,各种语言的特性和语法各不相同,但是高质量编程遵循的原则是相通的
我们要用简单清晰的逻辑编写代码,让自己能够看懂,让别人也能看懂的代码。不写自己不能理解的代码,增强代码的可修改和可读性。代码编写之后应该保证代码可读。
在go语言编写过程中们应该注意团队使用统一的代码格式,在编写过程中添加注释,使用通用的命名规范和控制流程,为代码逻辑添加错误和异常处理。
注释规则:
1. 公共符号始终注释,包中声明的变量常量函数以及结构体都需要添加注释,除了实现接口的方法,都需要进行注释说明。
2. 使用gofmt或者goimports自动格式化代码,将编写的go语言代码格式化为官方统一风格。
3. 有必要需要解释函数等代码的实现过程,以及代码实现的原因,例如解释代码的外部因素以及提供额外的上下文。
4. 解释代码什么情况下会出错,适合解释代码的限制条件,声明函数的定义域与值域。
命名:降低阅读理解代码的成本
一.变量命名:简介,缩略词全大写,当其位于变量开头且不需要导出时,使用全小写。当变量使用场景较远,需要为变量提供更多的上下文信息,变量声明时需要提供足够的信息量。
二.函数命名:不需要携带包名的上下文信息,函数名应当尽量简短。包与函数返回类型相同时可以省略类型信息,当包与函数返回类型不同时应当在函数名中添加类型信息。
三.包命名:只用小写字母组成,尽可能简短,不与标准库同名。尽量不使用变量名作为包名,使用单数不使用复数,谨慎的使用缩写。
编码规范:
1. 避免嵌套,保持正常流程清晰。
2. 尽量保持正常代码为最小缩进,注意括号匹配。
异常处理:
一.简单错误:
1. 简单的错误指的是仅出现一次的错误,且在其他地方不需要捕获该错误.
2. 优先使用errors.New来创建匿名变量来直接表示简单错误.
3. 如果有格式化的需求,使用fmt.Errort.
二.错误的Wrap和Unwrap.在fmt.Errorf中将一个错误关联至错误链中.
三.错误判定:
使用errors.Is而不是==,判断错误链中是否存在特定的错误信息。
在错误链上获取特定种类的错误,使用errors.As
使用panic在调用函数中不包含recover会导致成程序运行崩溃,因此不建议在业务代码中使用panic,如问题启动阶段发生不可逆转的错误时,可以在init或者main函数中使用panic
Recover只能在被defer的函数中使用,无法嵌套,旨在当前的goroutine生效,defer的语句是先进先出。
项目正确编程之后不仅是自己,项目其他成员也可以高效率进行协作完成一个完整的大项目