统一规范篇合理规划目录
本篇主要描述了公司内部同事都必须遵守的一些开发规矩,如统一开发空间,既使用统一的开发工具来保证代码最后的格式的统一,开发中对文件和代码长度的控制,必须经过Go语言自带的检测机制等 。【原则1.1】合理规划目录,一个目录中只包含一个包(实现一个模块的功能),如果模块功能复杂考虑拆分子模块,或者拆分目录 。
GOPATH设置【建议1.2】使用单一的 GOPATH
import 规范【规则1.3.1】在非测试文件(*_test.go)中,禁止使用 . 来简化导入包的对象调用 。
【规则1.3.2】禁止使用相对路径导入(./subpackage),所有导入路径必须符合 go get 标准 。
【建议1.3.3】建议使用goimports工具或者IDE工具来管理多行import
代码风格【规则1.4.1】提交代码时,必须使用gofmt对代码进行格式化 。
【规则1.4.2】提交代码时,必须使用golint对代码进行检查 。
【建议1.4.3】提交代码前,必须使用go vet对代码进行检查 。
大小约定【建议1.5.1】单个文件长度不超过500行 。
【建议1.5.2】单个函数长度不超过50行 。
【规则1.5.3】单个函数圈复杂度最好不要超过10,禁止超过15 。
【规则1.5.4】单行语句不能过长,如不能拆分需要分行写 。一行最多120个字符 。
【建议1.5.5】函数中缩进嵌套必须小于等于3层 。
【原则1.5.6】保持函数内部实现的组织粒度是相近的 。
命名篇
本篇以开发时从上往下的顺序既:开发前约定的基本命名规范、包、常量、变量、结构体、参数、返回值的顺序讲解了开发中各个环节的命名规范 。基本命令规范【规则2.1.1】需要注释来补充的命名就不算是好命名 。
【规则2.1.2】使用可搜索的名称
【规则2.1.3】做有意义的区分
项目目录名【规则2.2.1】目录名必须为全小写单词,允许加中划线‘-’组合方式,但是头尾不能为中划线 。
【建议2.2.2】虽然允许出现中划线,但是尽量避免或少加中划线 。
包名【原则2.3.1】取名尽量采取有意义的包名,简单和可阅读 。
【规则2.3.2】包名必须全部为小写单词,无下划线,越短越好 。尽量不要与标准库重名 。
【规则2.3.3】禁止通过中划线连接多个单词的方式来命名包名 。
【建议2.3.4】包名尽量与所在目录名一致,引用时比较方便 。
文件名【规则2.4.1】文件名必须为小写单词,允许加下划线‘_’组合方式,但是头尾不能为下划线
【建议2.4.2】虽然允许出现下划线,但是尽量避免 。
【建议2.4.3】文件名以功能为指引,名字中不需再出现模块名或者组件名 。
常量【规则2.5.1】常量&枚举名采用大小写混排的驼峰模式(Golang官方要求),不允许出现下划线
【建议2.5.2】按照功能来区分,而不是将所有类型都分在一组,并建议将公共常量置于私有常量之前
【规则2.2.3】如果是枚举类型的常量,需要先创建相应类型
【建议2.5.4】如果模块的功能较为复杂、常量名称容易混淆的情况下,为了更好地区分枚举类型,可以使用完整的前缀
变量变量申明【规则2.6.1】变量命名基本上遵循相应的英文表达或简写,在相对简单的环境(对象数量少、针对性强)中,可以将一些名称由完整单词简写为单个字母
变量命名惯例【规则2.6.2】变量名称一般遵循驼峰法,并且不允许出现下划线,当遇到特有名词时,需要遵循以下规则:
- 如果变量为私有,且特有名词为首个单词,则使用小写,如:apiClient
- 其它情况都应当使用该名词原有的写法,如 APIClient、repoID、UserID
【规则2.6.4】在函数外部申明必须使用var,不要采用:=,容易踩到变量的作用域的问题 。
全局变量名【规则2.6.5】全局变量必须为大小写混排的驼峰模式,不允许出现下划线 。首字母根据作为范围确定大小写 。
【建议2.6.6】尽量避免跨package使用全局变量,尽量减少全局变量的使用 。
局部变量名【规则2.6.7】局部变量名必须为大小写混排,且首字母小写,不能有下划线 。
循环变量【建议2.6.8】for循环变量可以使用单字母 。
结构体(struct)【规则2.7.1】struct申明和初始化格式采用多行
【规则2.7.2】结构体名必须为大小写混排的驼峰模式,不允许出现下划线,可被包外部引用则首字母大写;如仅包内使用,则首字母小写 。
推荐阅读
- Go语言基础—闭包
- 体验Go语言
- 地下车库设计与管理规范
- 龙之国物语|新手游《龙之国物语》职业选择、升级指南、任务、新人汇总攻略!
- 5个Python库可以帮你轻松的进行自然语言预处理
- 一文搞懂Go通道
- nodejs版本大文件之断点下载
- c语言0xc0000005是什么错误,vs 0xc0000005是什么错误-
- 古代文学体裁有哪些
- 标准C语言Microsoft专用C语言关键字之间的差别