【建议2.7.3】结构名建议采用名词、动名词为好 。
接口名【规则2.8.1】接口名必须为大小写混排,支持包外引用则首字母大写,仅包内使用则首字母小写 。不能有下划线,整体必须为名词 。
【建议2.8.2】单个函数的接口名以”er”作为后缀 。
函数和方法名【规则2.9.1】函数名必须为大小写混排的驼峰模式
【建议2.9.2】函数名力求精简准确,并采用用动词或动词短
【规则2.9.3】方法接收名必须为大小写混排,首字母小写 。方法接收者命名要能够体现接收者对象 。
【建议2.9.4】接收者名通常1个或者2个字母就够,最长不能超过4个字母 。
【建议2.9.5】接收者名不要使用me,this 或者 self 这种泛指的名字 。
【建议2.9.6】定义方法时,如果方法内不会直接引用接收者,则省略掉接收者名 。
参数名【规则2.10】参数名必须为大小写混排,且首字母小写,不能有下划线 。
返回值【规则2.11.1】返回值如果是命名的,则必须大小写混排,首字母小写 。
【建议2.11.2】 函数的返回值应避免使用命名的参数 。
开发篇
本篇主要是讲解开发中各个环节的开发规范和对一些代码的优化写法 。在本文中有一些特别标黄的建议,我真的建议你好好看看那些代码,因为那可能对你提高代码开发会很有帮助 。包【建议3.1.1】项目仓库中包含全量的代码
【建议3.1.2】建议采用 Glide 来管理第三方包
魔鬼数字【规则3.2】代码中禁止使用魔鬼数字 。
常量 & 枚举【建议3.3.1】 为整数常量添加 String() 方法
【建议3.3.2】让 iota 从 a +1 开始增量
结构体【规则3.4.1】对于要使用json转换的结构体代码,变量名必须为大写,否则你只会得到一个为空的对象
【建议3.4.2】 在初始化结构体时使用带有标签的语法
【建议3.4.3】将结构体的初始化拆分到多行
运算符【规则3.5】运算符前后、逗号后面、if后面等需有单空格隔开 。
函数【原则3.6.1】保持函数内部实现的组织粒度是相近的 。
【建议3.6.2】 返回函数调用
【建议3.6.3】 withContext 封装函数
参数【建议3.7.1】参数按逻辑紧密程度安排位置, 同种类型的参数放在相邻位置 。
【建议3.7.2】避免使用标识参数来控制函数的执行逻辑 。
【建议3.7.3】参数个数不要超过5个
返回值【规则3.8.1】函数返回值个数不要超过3个 。
【建议3.8.2】如果函数的返回值超过3个,建议将其中关系密切的返回值参数封装成一个结构体 。
注释【原则3.9.1】编写代码首先考虑如何代码自我解释,然后才是添加注释进行补充说明
【原则3.9.2】注释的内容要清楚、明了,含义准确,防止注释二义性 。
【原则3.9.3】在代码的功能、意图层次上进行注释,即注释用于解释代码难以直接表达的意图,而不是重复描述代码 。
【规则3.9.4】所有导出对象都需要注释说明其用途;非导出对象根据情况进行注释 。必须时,应该说明值的取值范围,及默认值 。
【规则3.9.5】注释的单行长度不能超过 80 个字符 。
【规则3.9.6】注释需要紧贴对应的包声明和函数之前,不能有空行、
【规则3.9.7】非跨度很长的注释,尽量使用 // 方式 。
【规则3.9.8】避免多余的空格,两句注释之间保持一个空格 。
【原则3.9.9】注释第一条语句应该为一条概括语句,并且使用被声明的名字作为开头 。
【建议3.9.10】//与注释的文档之间空一格 。
【规则3.9.11】每个程序包都应该有一个包注释,一个位于package子句之前的块注释 。
【规则3.9.12】不要依靠用空格进行对齐 。
【建议3.27】类型定义一般都以单数信息描述 。
【建议3.9.13】函数声明处注释描述函数功能、性能及用法,包括输入和输出参数、函数返回值、可重入的要求等;定义处详细描述函数功能和实现要点,如实现的简要步骤、实现的理由、设计约束等
【建议3.9.14】如果函数或者方法为判断类型(返回值主要为bool类型),则以 returns true if 开头 。
错误【原则3.10.1】错误处理的原则就是不能丢弃任何有返回err的调用,不要采用_丢弃,必须全部处理 。接收到错误,要么返回err,要么实在不行就panic,或者使用log记录下来
【规则3.10.2】error的信息不要采用大写字母,尽量保持你的错误简短,但是要足够表达你的错误的意思 。
【规则3.10.3】导出的错误变量的命名,以Err开始,如ErrSomething,无需导出的错误变量命名,以Error作为后缀,如specificError
推荐阅读
- Go语言基础—闭包
- 体验Go语言
- 地下车库设计与管理规范
- 龙之国物语|新手游《龙之国物语》职业选择、升级指南、任务、新人汇总攻略!
- 5个Python库可以帮你轻松的进行自然语言预处理
- 一文搞懂Go通道
- nodejs版本大文件之断点下载
- c语言0xc0000005是什么错误,vs 0xc0000005是什么错误-
- 古代文学体裁有哪些
- 标准C语言Microsoft专用C语言关键字之间的差别