头图

一、结构要点说明:

(一)、项目的主干:/cmd

每个项目的目录名应该与你想要的可执行文件的名称相匹配,例如:/cmd/myapp。不要在这个目录中放置太多的代码,如果代码是可以导入其他项目中使用,则应该放在/pkg目录下。如果代码不是可重用的,或者不希望其他人重用,应该把代码放在/internal目录中。

(二)、私人的应用程序和代码库:/internal

这是你不希望其他人在其应用程序或者库中导入代码,这个布局是由Go编译器本身来执行的。需要注意的是:internal目录并不局限于顶级目录,还可以在其他的目录下创建。可以向internal目录中添加额外的结构,以分隔共享和非共享的内部代码。这不是必需的(特别是对于较小的项目),但是最好有可视化的线索来显示预期的包的用途。实际的应用程序的代码可以放在/internal/app目录下(例如:/internal/app/myapp),这些应用程序共享的代码可以放在/internal/pkg目录中(例如:/internal/pkg/myprovilb)。因为我们习惯把相关的服务,比如账号服务,内部有rpc、job、admin等,相关的服务整合到一起后需要区分app。单一的服务可以去掉/internal/myapp。

(三)、外部程序使用的库代码:/pkg

外部程序可以使用的库代码(例如:/pkg/mypubliclib)。其他的项目会导入这些库,所以在这里放的东西应该慎重。/pkg目录中可以参考Go标准库的组织方式,按照功能分类。/internal/pkg一般用于项目内的跨多应用的公共共享代码,但是其作用域仅在单个项目工程内。

注意:internal目录是确保私有包不可导入的更好方法,因为它是Go强制执行的,/pkg目录仍是一种很好的方式,可以显式的表示该目录中的代码对于其他人来说可以安全使用的好方法

pkg目录

(四)、项目基础库:/kit

每个公司都应该为不同的微服务创建一个统一的kit工具包项目(基础库/框架)和app项目。基础库kit为独立项目,公司级建议只有一个,按照功能目录来拆分会带来不少的管理工作,所以建议合并整合。
kit项目必须具备的特点:
统一
标准库方式布局
高度抽象
支持插件
kit目录


苦心僧
18 声望2 粉丝