来自 java 和 grails 背景(并且在 30 年前编写了数百万行 C 代码),我看不出如何在 Windows 上使用固定的 gopath 来使用 go。
安装 go 创建这个结构
c:\users\me\go\scr
\pkg
\bin
Run Code Online (Sandbox Code Playgroud)
由于您希望拥有许多 go 项目,因此它们似乎必须在同一个 src/kpg/bin 目录中混合在一起,从而相互污染。例如
/src/project1/hello.go
/project2/hello.go
/pkg/xx
/bin/hello.exe
Run Code Online (Sandbox Code Playgroud)
hello.exe 会运行哪个 hello.go?
除非我遗漏了一些基本的东西,否则这似乎很疯狂——所有完全独立的项目都应该共享相同的包和 bin 目录。这意味着您不知道哪些包的哪些版本,哪些 exe 文件属于哪个项目,并且可能存在大量冲突。我希望每个单独的 go 应用程序(例如 java 或 grails 甚至 C)都有一个 /src、/pkg 和 /bin,并且 go 路径是完全多余的,它可以相对于当前项目根目录(例如在 grails 中)。
为了使事情有效,对于工作,我们必须使用不同的目录,例如
d:\work\project3
\project4
\package5
\go_utility6
\go_utility7
Run Code Online (Sandbox Code Playgroud)
所以现在我们总共有 6 个单独的目录,其中 go 程序存在。每次切换到不同项目时都更改路径是不可行的。我想另一种选择是将 6 条路径添加到 GOPATH。据推测,所有 7 个 go 项目都写入相同的 pkg 和 bin 目录,这将是一场灾难。
这种情况有没有站得住脚的解决方案(至少在 Windows 上)?
如果我们需要为每个项目都添加一个PATH到GOPATH,那么每个项目下的文件结构应该是什么?
比如uner xxx\go_utility6,这是一个独立的命令行go app,结构应该是什么?是否需要在某处有一个 src 目录?这个目录需要 gopath 指向它吗?它是否需要自己的 pkg,还是应该使用 c:\users\me\pkg 目录?
小智 1
你的例子“which hello.exe”应该诚实地使用,没有多大意义。两个同名的工具?即使两者都是api,您的开发人员也会对更有意义的名称感到高兴。
bin 文件夹用于您安装的第三方工具,因此您不必安装项目二进制文件。除了它们是工具之外,但是这个名字应该再次有意义。
您可以在此处获取有关项目结构的更多信息:https ://golang.org/doc/code.html
由于 go 1.8 支持项目文件夹下面的供应商文件夹,因此有可能打破原始结构。(恕我直言,供应商在 1.8 之前是不可维护的,是的,这太疯狂了)
您可能想要使用像direnv这样的工具,它可以支持您更改每个项目的 GOPATH 的愿望。 https://github.com/direnv/direnv
它还具有一些内置函数,用于将当前路径添加到 GOPATH。 https://github.com/direnv/direnv/blob/master/stdlib.sh#L355:1
例如,GoLang 还支持处理多个 GOPATH 和每个项目的 GOPATH。所以 direnv 也应该可以正常工作。
在我的公司,我们的其他项目旁边有一个 go 文件夹。go/src 下是我们的项目。到目前为止没有问题,因为供应商位于项目的供应商文件夹中并已提交。
迄今为止我推荐的最好的依赖管理器是: https ://github.com/golang/dep
我希望输入有所帮助。