本章目录:
0x00 前言简述
0x01 Go开发规范
- 命名规范
- 目录&package 包命名
- .go 文件命名
- constant-常亮命名
- variable-变量命名
- function-函数命名
- struct-结构体命名
- interface-接口命名
// 注释文本/* 注释文本 */
本章主要对 Go 语言开发规范进行记录与实践, 便于养成良好的开发习惯也可叫做规则(不至于进入一些大厂而因为开发习惯没养成而痛苦),规则的存在是为了使代码库易于管理,同时仍然允许工程师更有效地使用 Go 语言功能.
golintgo vet
Go 编程语言规范 (https://golang.org/ref/spec) 版本 Jul 26, 2021
Go 的通用准则可查看官方提供的参考指南:
- Effective Go
- Go Common Mistakes
- Go Code Review Comments
第三方公司Go开发规范参考: https://github.com/uber-go/
0x01 Go开发规范
命名规范
被包外部引用被包内部调用
目录&package 包命名
尽量保持package的名字和目录一致,采取有意义的包(简短而简洁)名,包名使用小写,不要使用下划线和大写字母,不用复数,例如
.go 文件命名
_test.go
constant-常亮命名
全部大写,并以_分割
variable-变量命名
一般为驼峰命名,遵循以下规则
- 变量为私有,首字母小写
- 变量为公有。首字母大写
- 单词为特有名次,而且是首个单词,则特有名词小写
若变量为布尔类型,则名称一般以"Has"、"Is"、"Can"、"Allow"开头
function-函数命名
采用驼峰命名法,注意特殊的匿名函数,以及单元测试函数。
struct-结构体命名
采用驼峰命名法,struct 声明和初始化用多行,特别注意匿名结构体。
interface-接口命名
命名规范基本和结构体一致, 但是单个函数习惯以"er"为后缀。
注释规范
Go语言中注释符号如下:
// 注释文本
/* 注释文本 */
Tips: 多行注释中可以嵌套单行注释。
//// 注释文本3
Packagedoc.go文件名的字母数序
Package
注释使用的范围:
- 包注释
- 接口注释
- 方法注释
- 代码逻辑注释
注释示例:
Tips :注释中的URL将会变成HTML链接。
样式规范
缩进与括号
;Tab
代码一致性
一致性的代码更容易维护、是更合理的、需要更少的学习成本、并且随着新的约定出现或者出现错误后更容易迁移、更新、修复 bug
相反,在一个代码库中包含多个完全不同或冲突的代码风格会导致维护成本开销、不确定性和认知偏差。所有这些都会直接导致速度降低、代码审查痛苦、而且增加 bug 数量。
将这些标准应用于代码库时,建议在 package(或更大)级别进行更改,子包级别的应用程序通过将多个样式引入到同一代码中,违反了上述关注点。
Import (包导入)
引入多个包时,按照三中类型区分,标准包,程序内部包,第三方包,建议写的时候有顺序的导入你的包。
默认情况下,这是 goimports 应用的分组
导入别名
如果程序包名称与导入路径的最后一个元素不匹配,则必须使用导入别名。
Function (函数)
(1) 函数分组与顺序
在进行Go语言时函数应按粗略的调用顺序排序,同一文件中的函数应按接收者分组。
struct, const, var
newXYZ()/NewXYZ()
由于函数是按接收者分组的,因此普通工具函数应在文件末尾出现。
(2) 减少不必要的嵌套以及else
处理错误情况/特殊情况
如果在 if 的两个分支中都设置了变量,则可以将其替换为单个 if。