如何设置Go项目工作区以与依赖工具和Go工具一起使用?

huangapple go评论88阅读模式
英文:

How to do a Go project workspace to work with dependencies tools and go tools?

问题

我有一个包含多个包的项目:

  • 项目包 "root":a/b/c(例如 github/b/c)
  • a/b/c 中,我们有很多包(p1、p2...)
  • 项目按照如何编写 Go 代码的官方建议进行管理。本地项目路径为:$GOPATH/src/a/b/c。同时,所有导入都是"非相对"的。
  • 该项目有可通过 go get 获取的依赖项

现在我想使用一些依赖管理工具,比如 gomgodep。这些工具中的每一个都会在存储库中创建一个额外的目录,并将所有供应商依赖项放在那里。它们还会操作 GOPATH 并将其设置为该供应商目录。假设该工具将所有供应商放在 path_to_project/.vendor 中,成为一个新的 GOPATH

我想要使用其中一个 Go 工具(gofmtgorename等),并了解我的项目和供应商目录中的包。问题是,如果 GOPATH=path_to_project/.vendorgodep 这样做),那么这些工具就无法识别我的项目中的包。

对此的一个想法是在 shell 和编辑器中设置 GOPATH=path_to_project/.vendor:GOPATH。或者使用 gom exec 调用每个命令(gom 在上述命题中设置了 GOPATH)。

是否有现成的自动解决方案?

最终目标是将 Go 项目与指定的依赖项版本(如 git 提交)捆绑在一起,并使工具和编辑器(vim/emacs)与这些工具一起使用。

英文:

I have a project with packages inside:

  • project package "root": a/b/c (eg github/b/c)
  • in a/b/c we have a lot of packages (p1, p2 ...)
  • project is managed according to How to Write Go Code official recommendations. The local project path is: $GOPATH/src/a/b/c. Also all imports are "not relative".
  • the project has go get-able dependencies

Now I want to use some dependency manager tool like gom or godep. Each of this tool creates an extra directory in repository and puts all vendor dependencies there. Also it plays with GOPATH and sets it to that vendor directory. Let's assume that the tool will put all vendors in path_to_project/.vendor - becoming a new GOPATH.

I want to use one of the go tools (gofmt, gorename, ...) being aware about packages in my projects and vendor directory. The problem is that if GOPATH=path_to_project/.vendor (godep does this) then tools are not aware about packages in my project.

One idea for this is to set a GOPATH=path_to_project/.vendor:GOPATH in a shell end editors. Or call every command with gom exec (gom sets a GOPATH in the above proposition)

Is there any ready and automatic solution for this?

Final goal is to bundle go project with specified dependencies versions (like git commits) and make tools + editors (vim/emacs) working with this tools.

答案1

得分: 0

如果你正在使用godep,你可以在go命令前加上godep前缀,像这样:

godep go build

或者

godep go fmt
英文:

If you are using godep, you can just prefix the go command with godep like this:

godep go build

or

godep go fmt 

huangapple
  • 本文由 发表于 2014年10月28日 23:17:34
  • 转载请务必保留本文链接:https://go.coder-hub.com/26611951.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定