引入包的时候, 不管是否只有一个外部包还是多个外部包,统一使用如下写法
import (
"fmt"
)
在同时包含多方包导入时候, 导入顺序按照以下顺序导入, 中间用空行分隔
import (
// 空白标识符导入
_ "gorm.io/driver/sqlite"
// 标准库
"fmt"
// 项目内部包
"github.com/aide-family/moon/pkg/log"
// 第三方包
"github.com/xxxx/xxxx"
)
如果有多方包命名冲突, 可以使用如下写法
import (
// 内部http包
nethttp "net/http"
// 第三方http包
"github.com/go-kratos/kratos/v2/transport/http"
)
统一按照go官方命名规则(原则是goland编辑器不能有警告
- 函数注释
// FuncName 函数注释
func FuncName(param1, param2 string) (string, error) {
return "", nil
}
多行的场景, 后面行缩进一字符, 第一行与后面空行间隔
// FuncName 函数注释
//
// param1: 参数1注释
// param2: 参数2注释
// return1: 返回值1注释
// return2: 返回值2注释
func FuncName(param1, param2 string) (string, error) {
return "", nil
}
- 变量注释
var (
// varName 变量注释
varName string
// varName2 变量注释
varName2 string
)
- 结构体注释
// StructName 结构体注释
type StructName struct {
// fieldName 字段注释
fieldName string
// fieldName2 字段注释
fieldName2 string
}
- 方法注释
// MethodName 方法注释
func (s *StructName) MethodName(param1, param2 string) (string, error) {
return "", nil
}
- 常量注释
// ConstName 常量注释
const (
// ConstName 常量注释
ConstName = "constName"
// ConstName2 常量注释
ConstName2 = "constName2"
// ConstName3 常量注释
ConstName3 = "constName3"
)
特殊说明, 项目中vobj里面的常量, 注释是放在行尾,因为会通过stringer工具生成,对应的方法
原则上函数或者方法,第一参数都是context(工具方法除外),如果有return error, error放在最后
func FuncName(ctx context.Context, param1) (string, error) {
return "", nil
}
接收器名一般为结构体名的首字母小写,比如结构体为User,方法为GetName,接收器为u,需为单字符,不可一结构体名称各个单词缩写命名
type User struct {}
func (u *User) GetName() string {
return ""
}
在开发某些功能时, 需要引入对应的外部实现来完成, 需要团队评估该外部依赖,同意后方可引入
对于简单功能的外部包,建议是内部自己实现,比如日志、配置、数据库等, 减少外部依赖,减少维护成本