Skip to content

Latest commit

 

History

History
149 lines (110 loc) · 2.82 KB

gopher.md

File metadata and controls

149 lines (110 loc) · 2.82 KB

开发者必看

开发规范

1. 包导入规范

引入包的时候, 不管是否只有一个外部包还是多个外部包,统一使用如下写法

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"
)

2. 命名规范

统一按照go官方命名规则(原则是goland编辑器不能有警告⚠️

3. 注释规范

  • 函数注释
// 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工具生成,对应的方法

4. 函数定义规范

原则上函数或者方法,第一参数都是context(工具方法除外),如果有return error, error放在最后

func FuncName(ctx context.Context, param1) (string, error) {
	return "", nil
}

5. 结构体方法

接收器名一般为结构体名的首字母小写,比如结构体为User,方法为GetName,接收器为u,需为单字符,不可一结构体名称各个单词缩写命名

type User struct {}

func (u *User) GetName() string {
	return ""
}

外部库引入规范

在开发某些功能时, 需要引入对应的外部实现来完成, 需要团队评估该外部依赖,同意后方可引入

对于简单功能的外部包,建议是内部自己实现,比如日志、配置、数据库等, 减少外部依赖,减少维护成本