【发布时间】:2018-01-30 21:49:50
【问题描述】:
来自 java 和 grails 背景,(并且在 30 年前编写了数百万行 C 语言),我看不出如何在 Windows 上使用固定的 gopath。
安装 go 创建这个结构
c:\users\me\go\scr
\pkg
\bin
由于您希望拥有许多 go 项目,因此它们似乎必须在同一个 src/kpg/bin 目录中混合在一起,相互污染。例如
/src/project1/hello.go
/project2/hello.go
/pkg/xx
/bin/hello.exe
hello.exe 将运行哪个 hello.go?
除非我遗漏了一些基本的东西,否则这似乎很疯狂——所有完全独立的项目都应该共享相同的包和 bin 目录。这意味着您不知道哪些包的版本,哪些exe文件属于哪个项目,并且可能存在很大的冲突范围。我本来希望每个单独的 go 应用程序(如 java 或 grails 甚至 C)都有一个 /src、/pkg 和 /bin,而 go 路径是完全多余的,它可以相对于当前项目根目录(如 grails 中)。
为了工作,为了工作,我们必须使用不同的目录,例如
d:\work\project3
\project4
\package5
\go_utility6
\go_utility7
所以现在我们总共有 6 个独立的 go 程序所在的目录。每次切换到处理不同的项目时都更改路径是不可行的。我猜另一个选择是将 6 条路径添加到 GOPATH。据推测,所有 7 个 go 项目都写入相同的 pkg 和 bin 目录,这将是一场灾难。
对于这种情况是否有可行的解决方案(至少在 Windows 上)?
如果我们需要为每个项目添加一个 PATH 到 GOPATH,那么每个项目下的文件结构应该是什么?
例如uner xxx\go_utility6,这是一个独立的命令行go app,应该是什么结构?那里需要有一个 src 目录吗?这个目录需要 gopath 指向它吗?它需要自己的 pkg,还是应该使用 c:\users\me\pkg 目录?
【问题讨论】:
-
参见How to Write Go Code 了解代码组织和工作区的基础知识。听起来您想要多个工作区。
-
我有一个问题...你能在同一个 Windows 中安装两个完全相同版本的 PhosoShop 吗?你可以在同一个 Windows 中安装两个 Visual Studio 2015 吗?现在回答您的问题...
go build的输出是单个二进制文件。将其放置在您想要的任何位置,然后像执行普通程序一样执行它 -
@NidhinDavid 有趣的类比,但是来自 java 背景,我们习惯于拥有任意数量的任何库版本而不会出现问题。试图掌握 go 的工作原理。实际上,我们确实需要多个版本的库,即生产版本和开发版本。不断切换它们不是一种选择,所以只是试图找到最好的工作方式。
-
Go 是向后兼容的忠实拥护者。如果您的库是,那么任何人升级都一定没有问题..因此不需要版本。如果不向后兼容,那么 Go 推荐一个新的存储库 - zduck.com/2014/go-and-package-versioning BTW 我不是 Go 专家..只是说我听到的,仅此而已。
-
@NidhinDavid 您误认为使用可执行文件进行开发,尤其是当项目很大或者您在不同公司拥有的多个项目上工作时,混合其源代码不是一个合适的答案。我使用了 Goland 和 IDE,它允许您设置工作区级别
GOPATH,但这显然不一定是这个问题的答案。