我正在寻找一个良好的项目组织,以进行多个用Go编写的组件的多平台项目。我从http://golang.org/doc/code.html知道了推荐的布局,但是那里建议的布局似乎不符合我的要求。
项目组件为:
- 服务器(用Go编写)
- 客户端,跨平台(Go)
- 库,在服务器和客户端之间共享(Go)
- 其他一些客户端(iOS,Android)
我的要求是:
- 单个git存储库中的所有组件
- 将组件分开(例如,每个组件一个目录)
- Go组件可以被构造为多个子包
我目前的做法:
要构建,我使用一个Makefile,其中
它可以工作,但是感觉很笨拙,与推荐的代码布局完全不同。
这是我正在考虑的替代方法:
在这种布局下,我只有一个GOPATH(gospace /),不需要笨拙的Makefile。但是,这些组件没有像第一种方法那样整齐地分离(即通过顶层目录)。
我的问题:哪种项目布局最适合我的需求以及Go约定和工具支持?有没有我没有看到的更好的选择?
这就是我组织类似项目的方式:
虽然大多数情况下以
回答这个问题已有很长时间了(关于OP的最新评论是2014年2月12日,而最新的回答是2014年4月16日)。当时我并没有进入Go的状态,只是在2018/19真正被介绍给Go了,但是看起来已经发生了很多变化。
我认为,影响本文答案的最大变化是Go Modules。
我的作品中有一个类似的项目(Go服务器,Go CLI,Android应用程序,iOS应用程序)。我当前正在使用go版本go1.13.7 darwin / amd64。这是我通过Go Modules附带的结构(受Ben Johnson的这篇文章影响很大):
根目录位于GOPATH之外,并包含必需的
对于非Go代码,我只是在Android和iOS的根目录中创建了单独的目录。