与其他非Go项目一起存储Go项目

时间:2015-03-18 10:25:29

标签: go

在代码组织方面,Go似乎做出了一个假设,它是我将要使用的唯一语言。但是,我想将每个Go项目视为另一个孤立的软件,并以与大多数程序存储数十年相同的方式存储它 - 在任意目录中,包含不少于和不多于所需的内容建立并运行它。

Go Go想要什么:

home/
├─go/
│ └─src/
│   └─some-organization/
│     └─some-go-project/
│       └─main.go
└─projects/
  └─some-organization/
    ├─some-c-project/
    │ └─src/
    │   └─main.c
    └─some-python-project/
      └─src/
        └─main.py

我想要的是什么:

home/
└─projects/
  └─some-organization/
    ├─some-c-project/
    │ └─src/
    │   └─main.c
    ├─some-python-project/
    │ └─src/
    │   └─main.py
    └─some-go-project/
      └─src/
        └─main.go

当然,没有人阻止我按照自己的方式构建它,但我将无法以预期的方式构建/安装该项目。做home/projects/some-organization/some-go-project/src/some-go-project/main.go之类的事情来解决这个问题实在太难了。

那么这里的共识是什么? Go社区如何处理这个问题?背到做?

2 个答案:

答案 0 :(得分:4)

我遇到了同样的问题,并尝试了以下解决方案(按时间顺序排列):

  • 不要将包裹放在$GOPATH中并从您的项目目录进行编译:这在您拥有单包项目时有效。无论如何,去项目应该有一个有限的包...
  • 使用项目目录中的符号链接到$GOPATH :每次要签出新项目时都必须使用符号链接。更多,要求包名称(fmt,test等)的各种工具都找不到你的包,除非你反过来制作链接,这同样很无聊(甚至更多,因为它违反你的git布局)。
  • 为每个项目添加$GOPATH条目(例如$PATH:比以前的解决方案更无聊,但大部分都有效。如果您的项目布局基于src/目录,那就更好了。
  • 使用vagrant和一个专用的$GOPATH :你可以按照golang的意图工作,增加了必须进入框中的复杂性。这就是我现在正在做的事情,因为它有流浪者作为奖励的好处。

答案 1 :(得分:2)

这是一个复杂的问题,也是一个令人头痛的问题,但我为解决这个问题所做的就是反过来做这件事:

home/
└─projects/
  ├bin/
  ├pkg/ 
  └─src/
    └─some-organization/
      ├─some-go-project/
      |  └─main.go
      ├─some-c-project/
      │ └─main.c
      └─some-python-project/
        └─main.py

我将go binpkg目录用于所有语言的二进制文件和库。 go布局也不错,只是不同而且你的代码是特殊的'与你所有其他代码不同的结构有点难看,所以我更喜欢为我的所有项目采用go目录结构。

作为一个好处,您可以通过repo托管网站对所有软件项目进行分类,这很不错。