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有好处;
函数变量语义清,错误处理要明确;
格式代码靠工具,规范统一不出错

 

posted @ 2025-06-23 11:34  X__cicada  阅读(42)  评论(0)    收藏  举报