这是我参与「第五届青训营」笔记创作活动的第5天。
【1】简介
什么是高质量
编写的代码能够达到正确可靠、简洁清晰的目标可称之为高质量代码。
编程原则
简单性,可读性,生产力。
【2】编码规范
【2.1】代码格式
推荐使用gofmt自动格式化代码。
【2.2】注释
注释应该解释代码作用。
注释应该解释代码如何做的。
注释应该解释代码实现的原因。
注释应该解释代码什么情况会出错。
【2.3】命名规范
variable
简洁胜于冗长。
缩略词全大写,但当其位于变量开头且不需要导出时,使用全小写。
ServeHTTPV ServeHttpX
XMLHTTPRequestV xmlHTTPRequestV
变量距离其被使用的地方越远,则需要携带越多的上下文信息。
function
函数名不携带包名的上下文信息,因为包名和函数名总是成对出现的。
函数名尽量简短。
当名为foo的包某个函数返回类型Foo时,可以省略类型信息而不导致歧义。
当名为foo的包某个函数返回类型T时(T并不是Foo),可以在函数名中加入类型信息。
package http
func Serve(l net.Listener, handler Handler) error // V
func ServeHTTP(l net.Listener, handler Handler) error // X
package
只由小写字母组成。不包含大写字母和下划线等字符。
简短并包含一定的上下文信息。schemaV taskV
不要与标准库同名。syncX stringsX
不使用常用变量名作为包名。bufioV bufX
使用单数而不是复数。encodingV encodingsX
谨慎地使用缩写。fmtV formatX
【2.4】控制流程
避免嵌套,保持正常流程清晰。
// Bad
if foo {
return x
}
else {
return nil
}
// Good
if foo {
return x
}
return nil
尽量保持正常代码路径为最小缩进。
// Bad
func oneFunc() error {
err := doSomething()
if err == nil {
err := doAnotherThing()
if err == nil {
return nil // normal case
}
return err
}
return err
}
// Good
func oneFunc() error {
if err := doSomething(); err != nil {
return err
}
if err := doAnotherThing(); err != nil {
return err
}
return nil // normal case
}