Go - 我是否为所有项目都有一个工作区,或者每个项目有一个工作区?

时间:2016-03-24 13:00:11

标签: go

使用Go时如何组织项目?我对工作区部分感到有点困惑。我已经阅读了以下内容:https://golang.org/doc/code.html#Workspaces ......这部分让我失望了:

  

典型的工作区包含许多包含许多包和命令的源存储库。大多数Go程序员将他们所有的Go源代码和依赖项保存在一个工作区中。

这是否意味着我创建的每个项目都是一个单独的工作区?例如,如果两个项目使用相同的包,我将在我的计算机上拥有该包的两个副本。

或者,这是否意味着您有一个主工作区,您的项目共享这些包?

有点困惑。

3 个答案:

答案 0 :(得分:7)

我个人希望每个项目都有不同的GOPATH。如果您可以使用工具自动执行该过程,则可以使用vg来管理项目的不同GOPATH。

巧妙的是,它与大多数shell集成并自动检测项目cd

答案 1 :(得分:4)

您有一个工作区,项目共享包。

它出现在overview section

  

Go程序员通常会将所有Go代码保存在一个工作区中。

     

请注意,这与其他编程环境不同,在这些环境中,每个项目都有一个单独的工作区,工作区与版本控制存储库紧密相关。

修改:如果您使用vendoring,则可以为每个项目有效地获取单独的工作区。这使得事情更接近其他编程语言的工作方式。

答案 2 :(得分:4)

到目前为止,当我想使用不同版本的Go或者我想将我的私人作品与孩子和我玩的代码分开时,我使用不同的工作区。此外,如果我想玩一些开源代码,但想要一个简单的方法来清理它。

这样的东西
mk /tmp/tmpgo
cd /tmp/tmpgo
# Copy or edit a setenv file
. setenv  # I use bash

setenv文件看起来像这样。

export GOROOT=$HOME/go16
export GOPATH=$PWD
export GOBIN=$GOPATH/bin
export PATH=$GOROOT/bin:$GOPATH/bin:$PATH
export PS1='\[\033[01;32m\]workspacenamehere\[\033[01;33m\] \W\[\033[00m\] '

这给了我一个go工作区,它有自己的bin,src,pkg子目录。我可以得到任何我想要的东西。如果我愿意,我可以删除整个临时目录。从像github.com这样的存储库中获取东西的趋势是从其他贡献者那里获得许多包,但是因为它将它们全部放入一个干净的src子目录中,所以很容易使用find并查看已被删除的内容。之后再次从高清中删除所有内容变得更加容易。