一尘不染

有人可以解释为什么GOPATH很方便以及通常应如何使用吗?

go

我是Go编程语言的新手,每个教程都从将GOPATH设置为当前项目文件夹开始。

我想念什么吗?程序员真的应该在cd进入新的Go项目文件夹时手动设置GOPATH 吗?我已经阅读了一些有关GOPATH的常见问题解答条目,但仍然无法解决。

那为什么GOROOT存在呢?目的是什么?

是否有任何自动工具来检测当前目录是否是Go项目的根文件夹(例如通过某个隐藏文件)并自动将GOPATH更改为该目录?

谢谢你,真的有任何建议

ps。例如,我开发了完全脱节的Go项目A,B和C,它们应该生活在单个“工作区”环境中吗?我猜不是,但是我该如何使用GOPATH和GOROOT?


阅读 216

收藏
2020-07-02

共1个答案

一尘不染

的目标GOPATH是将所有软件包集中到一个公共工作空间中。它本身并不是一个真正的新概念(例如,以Java
Classpath为例),但是由于不支持软件包版本控制,因此Go的使用大大简化了。

GOPATH输入新的项目文件夹时,不应手动设置Go程序员。每个项目文件夹应被认为是一个单独的程序包,并且与GOPATH其他程序包一起驻留,因此GOPATH应仅设置一次。教程首先要设置GOPATH,以便将教程工作区与其他任何内容隔离开来(或者只是假设用户尚未设置GOPATH)。

GOROOT被设置为向Go程序员提供标准软件包,您无需对其进行任何操作。简而言之,只有一个规则GOROOT:永远不要触摸它。不要在其中安装任何东西,不要修改标准软件包等。

我不知道用于在当前目录中检测Go项目的工具,但是创建它应该不会很复杂。

您如何处理不同的项目取决于您。Go的方式是将每个项目作为包放入$GOPATH/src目录中,然后从那里进行所有操作。因为我不太喜欢,所以将我定义GOPATH$HOME/.go。然后,将每个项目放在其他位置(在计算机中的任何位置)的专用目录中,并将项目目录符号链接到我的$GOPATH/src目录中。然后,我可以使用每个Go工具链命令(例如go build myproject),将该项目用作另一个软件包的包,等等。

2020-07-02