Go语言代码整体规范手册
一. 项目结构规范
myapp/
|----cmd/ #主入口目录(main包)
|----internal/ #私有代码(只能本项目使用)
|---pkg/ #可复用模块(对外使用)
|---api/ #接口定义(proto/json shema)
|---configs/ #配置文件(YAML/TOML等)
|---scripts/ #构建,部署脚本
|---test/ 测试代码
|--go.mod
|--go.sum
二.包规范(package)
包名规范:
全部小写
使用下划线或驼峰(如httpclient而不是HttpClient或http_client)
包名要清晰简短:utils,auth,store
一个目录一个包
三.命名规范
通用命名规则
| 包名 | 小写,无下划线 |
| 变量名 | 驼峰,如userId,tokenString |
| 常量名 | 大写加下划线,如MaxCount或ErrInvalidUser |
| 函数名 | 驼峰,如NewUser(),HandleLogin() |
| 结构体名 | 大写驼峰,如User,OrderInfo |
| 字段名 | 需导出则首字母大写,否则小写 |
四.格式化规范
所有格式交给gofmt或goimports工具自动完成
缩进:tab
花括号必须同行结尾
if of {
}
运算符,逗号后面必须有空格
a := b + c
fmt.Println(x, y)
五.import顺序规范
import( "fmt" //标准库 "github.com/gin" //第三方包 "your_project/internal/user" //本地包 )
使用goimports工具可自动整理
六.结构体规范
字段首字母大写才能被其他包访问或被JSON序列化
使用tag标注:
type User struct { ID int `json:"id"` Name string `json"name"` }
七.函数规范
结构
func FunctionName (param Type) Return Type { }
命名语义清晰:
构造函数: NewUserStore()
操作函数:GetUserByID(). UpdateProfile()
八.错误处理规范
错误永远要检查
result, err := dosomething() if err != nil { return nil, fmt.Errorf("doSomething failed:%w",err) }
不忽略错误 (不要_=err)
用error.New, fmt.Errorf,errors.Is, errors.As 来处理和封装错误
九.注释规范
包注释: 文件顶部用 //Package xxx ..描述
函数注释: 以函数名开头,简要说明功能
func NewUser(name string) *User { }
不写废话注释,不要重复代码本身
十.常见最佳实践
使用context.Context传递上下文
使用sync.Once,sync.Mutex管理并发
使用time.Duration处理超时和延时
使用切片和map前先make
合理使用接口不要滥用
保持函数简洁,职责单一
推荐工具配置:
自动格式化:gofmt,goimports
依赖管理:Go modules (go mod)
静态检查:golint,staticcheck,errcheck
单元测试:go test, testify/assert
总结口诀
包名小写不带符,结构体名驼峰书;
字段首字母大,导出JSON有好处;
函数变量语义清,错误处理要明确;
格式代码靠工具,规范统一不出错

浙公网安备 33010602011771号