一、参考
如何写出优雅的 Golang 代码
二、目录构造
2.1 pkg
寄存本我的项目中,能够被内部利用间接调用的代码库
即个别 /pkg 中寄存的是私有库
2.2 internal
公有代码寄存在 internal 中,
2.3 src
不倡议应用 src 寄存我的项目,
(1) go 语言的我的项目默认都会在 $GOPATH/src 目录下,如果以后的我的项目中还有 src 目录,则有
$GOPATH/src/github.com/test/project/src/code.go
这样的目录,看起来十分奇怪
(2) src 目录是大多数 Java 使用者的开发教训
2.4 平铺
(1) 对于框架或者库,将代码平铺在我的项目根目录下很失常,
例如:
如果没有平铺,想要引入一个应用 pkg 目录构造的框架时候,须要应用
github.com/test/project/pkg/somepkg
如果将所有代码平铺到根目录,则援用门路为
github.com/test/project/pkg/somepkg
(2) 对于一个 go 服务中,应用平铺形式不是十分适合
2.5 cmd
寄存所有的可执行文件
该目录下的每一个子目录,都蕴含了可执行文件
不应该将过多的代码放入,cmd 中
2.6 api
寄存以后我的项目,对外提供的所有 api 接口文件
api 目录下可能蕴含有二级目录,例如:
api/protobuf-spec
api/thrift-spec
api/http-spec
2.7 Makefile
目录 scripts 中寄存一些我的项目运行的脚本
通过 Makefile 调用这些脚本
三、模块拆分
3.1 按层拆分(java 等)
web 框架的常见架构形式为 MVC 分层,行将服务中的不同组件分为
Model, View, Control 三层
上面是一个常见的 python django 我的项目构造
按层拆分的益处是:
(1) 强调了按层划分职责
(2) 扁平的命名空间
(3) 单体服务的场景
3.2 按职责拆分(go 我的项目)
divide-by-responsibility