Home Docs 贡献 代码规范 代码规范
GoGo Code Review Comments Effective Go 了解和避免 Go landmines 代码注释Go’s commenting conventions 如果审查者询问这段代码为什么是这样,那么注释会非常有用。 命令行标志应该使用破折号,而不是下划线 命名选择接口名称时请考虑包名,避免冗余。 例如, storage.Interface
优于 storage.StorageInterface
。 不要在包名称中使用大写字符、下划线或破折号。 选择包名时请考虑父目录名。 例如, pkg/controllers/autoscaler/foo.go
应该叫 package autoscaler
而不是 package autoscalercontroller
。除非有充分的理由, package foo
行应该与 .go
文件所在目录的名称相匹配。 如果需要消除歧义,引入者可以使用不同的名称。 锁应该被称为 lock
并且永远不应该被嵌入 (always lock sync.Mutex
). 当存在多个锁时,按照 Go 约定为每个锁指定一个不同的名称: stateLock
, mapLock
等。 [API conventions] [Logging conventions] Go语言代码注释模板 # 普通方法注释 # // ${function_name}
// @receiver ${receiver}
// @param ${params}
// @return ${return_types}
// Identity figure the configuration's identity.
// identity = user + space todo
// @receiver configuration current config
// @return string identity the configuration's empty able identity
func (configuration *Configuration) Identity() string {
}
接口注释模板 # // ${interface_name}
// IMap map interface
type IMap interface {
}
接口方法注释模板 # // ${function_name} ${todo}
// @receiver ${receiver}
// @param ${params}
// @return ${return_types}
// Get get value element by key
// @param key key
// @return value value
// @return loaded success is true, fail is false
Get(key interface{}) (value interface{}, loaded bool)
结构体注释模板 # // ${struct_name}
// Configuration configuration structure
type Configuration struct {}
结构体参数注释模板 # // ${struct_field_name} ${todo}
type Configuration struct {
// user user information entity
user *entity.User
}
测试规范 # 所有新包和重要的新功能都必须附带单元测试。 表驱动测试是测试多个场景/输入的首选。 不要期望异步的事情会立即发生——不要等待一秒钟就期望 pod 正在运行。请等待并重试。 有关其他测试建议,请参阅 测试指南 。 目录和文件规范 # 避免包杂乱无章。为新包找到合适的子目录。没有合适主目录的包放入新的包子目录 pkg/util
. 避免使用通用的包. 名为“util”的包是没有明确含义的。相反,创建一个描述您所需功能的名称。 例如, 处理等待操作的实际函数在 wait
包中并包括类似的功能Poll
。 全称是 wait.Poll
。 所有文件名都应为小写。 Go 源文件和目录使用下划线,而不是破折号。包目录通常应尽可能避免使用分隔符。当包名是多个单词时,它们通常应该在嵌套的子目录中。 文档目录和文件名应该使用破折号而不是下划线。 遵循第三方代码的这些约定:普通第三方依赖项的 Go 代码使用 go modules 进行管理。 其他第三方代码放入 third_party
.fork的第三方 Go 代码放入 third_party/forked
. forked 的goland标准库放入 third_party/forked/golang
. 第三方代码必须包含许可证。这也包括修改后的第三方代码和摘录。