我想做一个go get:
go get github.com/go-sql-driver/mysql
它失败,并出现以下错误:
package github.com/go-sql-driver/mysql: cannot download, $GOPATH not set. For more details see: go help gopath
当我做一个go env,一个go值列表如下所示:
ubuntu@ip-xxx-x-xx-x:~$ go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH=""
GORACE=""
GOROOT="/usr/lib/go"
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread"
CGO_ENABLED="1"
显然GOPATH没有设置,我该如何设置,在哪里设置?
我看到许多线程提到了这个错误,但没有一个线程提供了我的问题的答案,需要编辑哪个文件来为这个路径提供一个值?
你可以使用“导出”解决方案,就像其他人建议的那样。我想为您提供另一个永久方便的解决方案:您可以在运行Go命令时使用任何路径作为GOPATH。
首先,你需要下载一个名为gost的小工具:https://github.com/byte16/gost/releases。如果你使用ubuntu,你可以下载linux版本(https://github.com/byte16/gost/releases/download/v0.1.0/gost_linux_amd64.tar.gz)。
然后你需要运行下面的命令来解压它:
$ cd /path/to/your/download/directory
$ tar -xvf gost_linux_amd64.tar.gz
你会得到一个可执行的gost。您可以移动到/usr/local/bin方便使用:
$ sudo mv gost /usr/local/bin
运行下面的命令,将想要用作GOPATH的路径添加到gost维护的路径空间中。需要为路径指定一个稍后使用的名称。
$ gost add foo /home/foobar/bar # 'foo' is the name and '/home/foobar/bar' is the path
运行任何你想要的Go命令,格式如下:
gost goCommand [-p {pathName}] -- [goFlags...] [goArgs...]
例如,你想运行去github.com/go-sql-driver/mysql以/home/foobar/bar作为GOPATH,只需如下所示:
$ gost get -p foo -- github.com/go-sql-driver/mysql # 'foo' is the name you give to the path above.
它将帮助您设置GOPATH并运行命令。但是请记住,您已经将路径添加到gost的路径空间中。如果你在/home/foobar/bar的任何级别的子目录下,你甚至可以只运行下面的命令,它会做同样的事情:
$ gost get -- github.com/go-sql-driver/mysql
gost是一个简单的Go工具,可以帮助你管理gopathths和运行Go命令。有关如何使用它来运行其他Go命令的详细信息,您可以运行gost help goCmdName。例如,你想了解更多关于安装的信息,只需输入下面的单词:
$ gost help install
您还可以在项目的README中找到更多详细信息:https://github.com/byte16/gost/blob/master/README.md
新方法:模块
从Go 1.11开始,你不再需要使用GOPATH。简单地转到你的项目目录,这样做一次:
go mod init github.com/youruser/yourrepo
这样,Go就在该目录下创建了一个模块根目录。
您可以创建任意多的模块。
有关步骤的说明,也请参见这个答案。
旧方法:GOPATH
如果你坚持使用GOPATH,请注意以下几点:
自从Go 1.8以来,你不需要设置你的GOPATH或GOROOT。
默认情况下,GOPATH位于用户/主目录下。
从文档中可以看到:
如果没有设置GOPATH,则在Unix系统上假设为$HOME/go,在Windows系统上假设为%USERPROFILE%\go。如果希望使用自定义位置作为工作空间,可以设置GOPATH环境变量。