Golang代码规范
参考 https://golang.org/doc/effective_go.html
文章目录
项目目录结构规范
PROJECT_NAME
├── README.md 介绍软件及文档入口
├── bin 编译好的二进制文件,执行./build.sh自动生成,该目录也用于程序打包
├── build.sh 自动编译的脚本
├── doc 该项目的文档
├── pack 打包后的程序放在此处
├── pack.sh 自动打包的脚本,生成类似xxxx.20170713_14:45:35.tar.gz的文件,放在pack文件下
├── public 公共文件/静态文件
└── src 该项目的源代码
├── main 项目主函数
├── test 测试
├── app 项目代码
├── research 在实现该项目中探究的一些程序
└── vendor 存放go的库
├── github.com/xxx 第三方库
└── xxx.com/abc 公司内部的公共库
项目的目录结构尽量做到简明、层次清楚。
./app
├── bootstrap //入口引导文件
├── cache
├── config //项目配置 项目配置文件简单,配置项少。大部分配置公司要用配置中心统一配置。
├── controller //request请求处理中心 ——> controller ——> Response / view
├── library //项目工具库
├── log //日志
├── middleware //中间件
├── model //data model.xorm -——> 数据库表映射模型
├── plugin //插件--自己开发/自己找的 --delete
├── route //路由管理
├── service //前端数据获取操作 service
文件名命名规范
用小写,尽量见名思义,看见文件名就可以知道这个文件下的大概内容,对于源代码里的文件,文件名要很好的代表了一个模块实现的功能。
命名规范
包名
包名用小写,使用短命名,尽量和标准库不要冲突
接口名
单个函数的接口名以”er”作为后缀,如Reader,Writer
接口的实现则去掉“er”
type Reader interface {
Read(p []byte) (n int, err error)
}
两个函数的接口名综合两个函数名
type WriteFlusher interface {
Write([]byte) (int, error)
Flush() error
}
三个以上函数的接口名,类似于结构体名