这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
高质量编程
编程原则
1,简单性
2,可读性
3,生产力。
编码规范
代码格式:使用gofmt自动格式化代码
注释://,公共符号始终要注释。解释代码作用(公共符号),如何做(注释实现过程),实现原因(解释代码外部因素,提供额外上下文),什么情况下出差错(解释代码限制条件)
命名规范
变量,variable
1,简洁胜于冗长
2,缩略词全大写,但当其位于变量开头,且不需要导出时,使用全小写。
3,全局变量在其名字中需要更多的上下文信息,可以在不同地方轻易辨认出。
函数 function
1,函数名不携带包名的上下文信息,因为包名和函数名总是成对出现。
2,函数名尽量简短。
3,当名为foo的包某个函数返回类型Foo时,可以省略类型信息而不导致歧义。
4,当名为foo的包某个函数返回类型T时(T并不是Foo),可以在函数名中加入类型信息
包 package
1,只由小写字母组成。
2,简短并包含一定的上下文信息。例如:schema,task.
3,不要与标准库同名,不要使用sync,或者strings.
4,使用单数而不是复数。是encoding,而不是encodings.
5,不使用常用变量名作为包名。
控制流程
1,避免嵌套,保持正常流程清晰
2,尽量保持正常代码路径为最小缩进。
错误和异常处理
1,简单的错误指的是仅出现一次的错误,且在其他地方不需要捕获该错误。
2,优先使用errors.New来创建匿名变量来直接表示简单错误。
3,如果有格式化的需求,使用fmt.Errorf.
4,错误的Wrap和,Unwrap.错误的wrap实际上是提供了一个error嵌套另一个error的能力,从而生成一个error的跟踪链。在fmt.Errorf中使用:%w关键字来将一个错误关联至错误链中。
5,判定一个错误是否为特定错误,使用errors.ls。不同于使用==,使用该方法可以判定错误链上所有错误是否含有特定的错误。
6,在错误链上获取特定种类的错误,使用errors.As.
7,panic,不建议在业务代码中使用。
8,recover,在defer中使用,嵌套无法生效,defer语句是先进后出的。\