我是Go编程语言的新手,每个教程都是从将GOPATH设置为当前项目文件夹开始的。
我是不是遗漏了什么?程序员真的应该在cd到新的Go项目文件夹时手动设置GOPATH吗?我已经阅读了几个关于GOPATH的常见问题解答条目,但仍然无法理解它。
那么为什么GOROOT会存在呢?它的目的是什么?
有没有自动工具可以检测当前目录是否是Go项目的根文件夹(例如通过某个隐藏文件),并自动将GOPATH更改为该目录?
谢谢,有什么非常有用的建议吗?
ps。例如,我开发了完全分离的Go项目A、B和C,它们是否应该生活在单一的“工作空间”环境中?我想不是,但是我应该怎么处理GOPATH和GOROOT呢?
发布于 2014-06-19 20:20:41
GOPATH的目标是将所有包集中到一个公共工作区中。它本身并不是一个新概念(例如,考虑Java类路径),但是Go的使用非常简单,因为它不支持包版本控制。
Go程序员不应该在进入新的项目文件夹时手动设置GOPATH。每个项目文件夹都被认为是一个单独的包,并与其他包一起驻留在GOPATH中,因此GOPATH应该只设置一次。教程从设置GOPATH开始,以便将教程工作区与其他任何东西隔离(或者简单地假设用户尚未设置GOPATH )。
GOROOT为Go程序员提供了标准的包,你不需要对它做任何事情。简而言之,GOROOT有一条规则:永远不要,永远不要碰它。不要在里面安装任何东西,不要修改标准包,等等。
我不知道有什么工具可以检测当前目录中的Go项目,但它的创建应该不会非常复杂。
如何处理不同的项目取决于你。Go的方法是将每个项目作为一个包放在$GOPATH/src目录中,然后从那里开始执行所有操作。因为我真的不喜欢它,所以我将我的GOPATH定义为$HOME/.go。然后,我将每个项目放在其他地方的专用目录中(我电脑中的任何地方),并将项目目录符号链接到我的$GOPATH/src目录中。然后,我可以使用每个Go工具链命令(例如go build myproject),将项目用作另一个项目的包,等等。
发布于 2014-06-20 01:36:22
GOPATH允许您在一个地方收集依赖项源代码和编译后的二进制文件。这似乎是一个很有吸引力的想法。然而,我发现自己正在做几个完全不相关的Go项目,而另一种方法更适合我。
这是一种与Elwinar的symlnks相似但不同的策略。我在一个空文件夹中启动了一个新项目并创建了src。然后我将这个名为env.sh的shell脚本放入文件夹:
if [ `type -p go` = "" ]; then
export PATH=$PATH:/usr/local/go/bin
fi
export GOPATH=$PWD
export PATH=$PATH:$PWD/bin每次我开始工作时,我都会使用
. env.sh注意点和空格-它们很重要。
现在,我在这个项目中所做的一切都本地化在这个文件夹中。这可能不是最广泛使用的策略,但对我来说效果很好。
还有一件事:如果您的依赖项使用环境变量进行测试等,您也可以将它们放在env.sh中。例如,Gorp具有
export GORP_TEST_DSN=test/testuser/TestPasswd9
export GO_TEST_DSN=testuser:TestPasswd9@/test附录
在最新的Go版本中,GOPATH是可选的;如果您不设置它,则默认值为$HOME/go。如果您确实设置了它,并且还想使用新的模块特性,那么也要设置GO111MODULES=on。
发布于 2018-10-28 05:50:56
你不需要设置你的或GOROOT.默认情况下,GOPATH位于用户/主目录下。
如果未设置GOPATH,则假定在Unix系统上为$HOME/go,在Windows上为%USERPROFILE%\go。如果要使用自定义位置作为工作空间,可以设置GOPATH环境变量。
Go模块
现在有了Go模块支持(从Go 1.11开始),所以你不再需要使用GOPATH了。例如,您可以转到系统上的任何目录($GOPATH之外),并在那里初始化一个新的go模块,然后在那里开始工作。不需要GOPATH。
你只需要做一次(在一个目录中):
go mod init$GOPATH:Go在其下存储以下文件:
($GOPATH/src)
$GOROOT:Go源代码所在的位置,如Go标准库。
此外,要从系统上的任何位置运行任何go installed可执行文件,您可能需要将$GOPATH/bin添加到path环境变量中,如下所示:
export PATH=$PATH:$(go env GOPATH)/bin更多信息,请访问this。
https://stackoverflow.com/questions/24306183
复制相似问题