一、参考

如何写出优雅的 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