golang实际总结(1) ——golang项目结构(模块拆分) - Go语言中文社区

golang实际总结(1) ——golang项目结构(模块拆分)


一、参考

golang学习系列目录——更新ing

如何写出优雅的 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项目结构

image.png

按层拆分的好处是:

(1) 强调了按层划分职责

(2) 扁平的命名空间

(3) 单体服务的场景

3.2 按职责拆分(go项目)

divide-by-responsibility

版权声明:本文来源Segmentfault,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://segmentfault.com/a/1190000039759055
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-06-13 21:45:23
  • 阅读 ( 1278 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢