高质量编程原则特点
高质量:编写代码能够达到正确可靠、简洁清晰的目标可称之为高质量代码
对于高质量编程而言各种边界条件是否需要考虑完备,异常情况处理稳定性保证;而其的特点也要满足易读易维护,便于工程师相互合作查看。
编程原则:实际的应用场景千变万化,各种语言的特性和语法各不相同,但是高质量编程遵循的原则是相通的。
*高质量编程特点:
简单性:消除“多余的复杂性”,以简单清晰的逻辑编写代码;不理解的代码无法修复改进 可读性:代码是写给别人看的,而不是机器;编写可维护代码的第一步是确保代码可读 生产力:团队整体工作效率非常重要。(重点)
注释
公共符号始终要注释。
-
包中声明的每个公共符号(变量、常量、函数以及结构都需要添加注释)。
-
任何既不明显也不简短的公共功能必须予以注释。
-
无论长度或复杂程度如何,对库中的任何函数都必须进行注释。
// ReadAll reads from r until an error or EOF and returns the data it read.
// A successful call returns err == nil, not err == EOF. Because ReadAll is
// defined to read from src until EOF, it does not treat an EOF from Read
// as an error to be reported.
func ReadAll(r Reader) ([]byte, error)
注:有一个例外,不需要注释实现接口的方法。
// Read implements the io. Reader interface
func (r *FileReader) Read(buf []byte) (int, error)
代码格式
gofmt:Go语言官方提供的工具,能自动格式化Go语言代码为官方统一风格,常见IDE都支持方便的配置。
goimports:也是Go语言官方提供的工具,实际等于dofmt加上依赖包管理,自动增删依赖的包引用、将依赖包按字母序排序并分类。
注释:
注释应该做的:注释应该解释代码的作用、注释应该解释代码如何做的、注释应该解释代码实现的原因、注释应该解释代码什么情况会出错。
适合注释实现过程
// Add the Referer header from the most recent
// request URL to the new one, if it's not http->http :
if ref : = refererForURL(reqs[len(reqs)-1]. URL, req. URL); ref! =““{
req.Header. Set(“Referer”, ref)
}
对于公共符号都有注释说明;尽管LimitedReader. Read 本身没有注释,但它紧跟LimitedReader结构的声明,明确它的作用。
代码是最好的注释;注释应该提供代码未表达出来的上下文信息。
函数命名规范
- variable
简洁胜于冗长;缩略词全大写,但当其位于变量开头且不需要导出时,使用全小写;变量距离其被使用的地方越远,则需要携带越多上下文信息。
i和index的作用域范围仅限于for循环内部时index的额外冗长几乎没有增加对于程序的理解。
// Bad
for index : = 0; index < len(s); index ++{
// do something
}
// Good
for i : = 0; i <len(s); i++{
//do something
}
- function
函数名不携带包名的上下文信息,因为包名和函数名总是成对出现的。
函数名尽量简短。
当名为foo的包某个函数返回类型Foo时,可以省略类型信息而不导致歧义。
当名为fui的包某个函数返回类型T时(T并不是Foo),可以在函数名中加入类型信息
- package
只由小写字母组成。不包含大写字母和下划线等字符。
剪短并包含一定的上下文信息。例如schema、task等。
不要与标准库同名。例如不要使用sync或者strings。
以下规则尽量满足,以标准库包名为例: 不使用常用变量名作为包名。例如使用bufio而不是buf。 使用单数而不是复数。例如使用encoding而不是encodings。 谨慎地使用缩写。例如使用fmt在不破坏上下文的情况下比format更加剪短。
总结
对于编程来说编程规范还是很有必要的,一个搞得编程规范习惯不仅能够提高编程效率,还能提高编程语言的美化程度,一句话说得好,代码是给人看的不是给机器看的。