我正在尝试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,我如何以及在何处设置它?
我看到很多线程都提到了这个错误但没有提供我的问题的答案,需要编辑哪个文件来为这条路径提供一个值?
答案 0 :(得分:259)
2018+答案:
2018年之前答案:
只需将以下行添加到〜/ .bashrc中,这将保持不变。但是,您可以在我的示例中使用您喜欢的其他路径作为GOPATH而不是 $ HOME / go 。
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
答案 1 :(得分:62)
Ubuntu 14.04
export GOPATH=$HOME/go
此外,您可以将此字符串添加到文件
$HOME/.bashrc
答案 2 :(得分:58)
应将GOPATH设置为新创建的空目录。这是go"工作空间",它下载包等等。我用〜/ .go。
例如:
mkdir ~/.go
echo "GOPATH=$HOME/.go" >> ~/.bashrc
echo "export GOPATH" >> ~/.bashrc
echo "PATH=\$PATH:\$GOPATH/bin # Add GOPATH/bin to PATH for scripting" >> ~/.bashrc
source ~/.bashrc
来源:http://www.larry-price.com/blog/2013/12/15/setting-up-a-go-environment-in-ubuntu-12-dot-04/
答案 3 :(得分:14)
export GOPATH=/path/desired/here
无需编辑任何文件,我们只需使用上面的命令直接编辑Go环境变量即可。
答案 4 :(得分:10)
最短和当前解决方案。
在终端中编写此代码。
export GOPATH=path/to/your/gopath/directory
注意:这将在每个新的终端窗口或系统重新启动时重置。
要坚持不懈,请根据您的shell将以下代码粘贴到.zshrc
或.bashrc
文件中。 主目录中的这些文件。它将如下所示。
export PATH=path/to/some/other/place/composer/for/example
export GOPATH=path/to/your/gopath/directory
export PATH=$PATH:$GOPATH/bin
答案 5 :(得分:9)
如果您设置了需要修改环境变量的任何内容,例如Java,Go等对此非常熟悉。
我将假设您在Go路径的某处具有以下目录结构:
\---[folder name]
+---bin
+---pkg
\---src
sudo nano /etc/environment
PATH=...
并结束,并在最后一个路径后添加一个冒号:
,然后粘贴到您的完整go path
中。 /home/user/gocode
并且你已经完成了,这应该使它在系统中保持不变。
答案 6 :(得分:8)
您也将在以后需要GOPATH。因此,请将其添加到~/.bashrc
。
答案 7 :(得分:8)
转到模块[新方法]
从Go 1.11开始:现在有了Go Modules支持(以前称为vgo ),因此您不必再使用GOPATH。但是,这仍然是实验性功能。
例如,您可以转到系统中的任何目录($ GOPATH以外的目录),并且可以在此处初始化一个新的Go模块,然后可以在其中工作。不需要GOPATH。
您只需要执行一次(在目录中 ):
go mod init
此后,该目录将被视为模块根目录。您可以根据需要创建任意数量的模块。 GOPATH将很快成为历史。
如果您坚持使用GOPATH,请注意以下事项:
自Go 1.8以来:您无需设置GOPATH或GOROOT。默认情况下,GOPATH在用户/主目录下。
如果未设置GOPATH,则在Unix系统上假定为$ HOME / go,在Windows上假定为%USERPROFILE%\ go。如果要将自定义位置用作工作区,则可以设置GOPATH环境变量。
更多信息请查看this。
答案 8 :(得分:4)
go path可以是你想要的任何地方,只需创建一个目录,并将GOPATH名称中的全局路径变量设置为你的环境。
mkdir ~/go
export GOPATH=~/go
go get github.com/go-sql-driver/mysql
答案 9 :(得分:4)
我的环境与你的相似。
$go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH=""
GORACE=""
GOROOT="/usr/lib/go-1.6"
GOTOOLDIR="/usr/lib/go-1.6/pkg/tool/linux_amd64"
GO15VENDOREXPERIMENT="1"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"
我通过将GOPATH设置为 / usr / lib / go 解决了这个问题。尝试一下。
export GOPATH=/usr/lib/go
export PATH=$PATH:$GOPATH/bin
答案 10 :(得分:4)
这是使用fish shell
在 Ubuntu 15.10 上为我工作的原因:
# ~/.config/fish/config.fish
set -g -x PATH /usr/local/bin $PATH
set -g -x GOPATH /usr/share/go
然后我必须更改go
文件夹(已设置为root)的权限
sudo chown <name>:<name> -R /usr/share/go
答案 11 :(得分:3)
使用Go 1.8(2017年第2季度),如果您接受默认的GOPATH
值(为您设置),则无需编辑任何文件
$HOME/go
您可以在issue 17262和associated twitter vote上看到评论:
通过选择默认
之类的内容GOPATH
,我们可以使文档更容易,因为我们可以说
$ go get github.com/foo/bar
会将
github.com/foo/bar
repo签入$HOME/go/src/github.com/foo/bar
。我们不需要设置env var来分散新手的注意力,我们需要做的就是在页面底部加上一个小括号
$HOME/go
是go工作区的默认路径 如果您想更改此路径,请将GOPATH
变量设置为您选择的内容。
答案 12 :(得分:3)
GOPATH 是工作区位置的环境变量。 GOROOT 是安装目录的环境变量。虽然在安装期间会自动设置 GOROOT 和 GOPATH (如果没有错误),但要手动指定,您可以按照以下流程进行操作。此外,有关详细信息,请参阅GO's wiki page。
最好将 GOPATH 设置为主目录中的目录,例如$ HOME / go,%USERPROFILE%\ go(Windows)。
在您的终端类型
上<div>
在终端上打开的文档中按 i 并添加以下路径
vim ~/.profile
按 ESC 并输入:x 。 最后,您应该重新启动(关闭并打开)您的终端或退出和登录。
注意不要将 GOROOT 和 GOPATH 设置为同一目录,否则会收到警告。
答案 13 :(得分:2)
(Ubuntu)
如果您未设置GOPATH,则将使用默认设置。
您必须在$ PATH中添加$ GOPATH / bin才能执行$ GOPATH / bin中安装的任何二进制文件,或者您需要键入$ GOPATH / bin / the-command。 将此添加到您的〜/ .bash_profile
export PATH=$GOPATH/bin:$PATH
当前的GOPATH命令:
go env GOPATH
更改GOPATH命令:
export GOPATH=$HOME/your-desired-path
答案 14 :(得分:1)
修改您的~/.bash_profile
以添加以下行:
$ export GOPATH=$HOME/work
保存并退出编辑器。然后,来源~/.bash_profile
$ source ~/.bash_profile
注意:设置GOBIN路径以在运行安装时生成二进制文件
$ export GOBIN=$HOME/work/bin
答案 15 :(得分:1)
export GOROOT=/usr/lib/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin
您可能要检查 $ go env
答案 16 :(得分:1)
对于 Go 1.13 + :
go env -w GOPATH=$HOME/go
要设置GOPATH(无论GO版本如何),请在您的~/.bashrc
中添加以下行:
export GOPATH=$HOME/go
并且不要忘记提供您的.bashrc
文件:
source ~/.bashrc
golang
官方Wiki上的更多选项:
https://github.com/golang/go/wiki/SettingGOPATH
答案 17 :(得分:0)
另一种解决方案:从GO*
go env
环境变量
<强> .bashrc中:强>
eval $(go env | grep '^GO[A-Z0-9_]*=' | while read setenv; do
echo "export $setenv; "
done 2> /dev/null)
[[ -n $GOPATH ]] || export GOPATH="$HOME/go/bin"
[[ -n $GOROOT ]] || export GOROOT=/usr/bin/go
export PATH="$PATH:$GOPATH/bin:$GOROOT/bin"
答案 18 :(得分:0)
在我的Fedora 20机器上,我在〜/ .bashrc中添加了以下行:
export GOROOT=/usr/lib/golang
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
答案 19 :(得分:0)
您可以像其他人建议的那样使用“导出”解决方案。我想为您提供另一种永久方便的解决方案:在运行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...]
例如,您希望以go get github.com/go-sql-driver/mysql
作为GOPATH运行/home/foobar/bar
,只需执行以下操作:
$ 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工具,它可以帮助您管理GOPATH并运行Go命令。有关如何使用它来运行其他Go命令的更多详细信息,您只需运行gost help goCmdName
即可。例如,您想了解有关install
的更多信息,只需在下方输入以下字词:
$ gost help install
您还可以在项目的自述文件中找到更多详细信息:https://github.com/byte16/gost/blob/master/README.md
答案 20 :(得分:0)
这是最烦人的事情。希望能节省你的时间。
如果以root用户身份安装了go。系统的bash_profile文本文件〜/ .bash_profile的root用户需要将$ GOROOT分配给go安装目录,并且需要将$ GOPATH分配给go / src目录。
...$# sudo su
...$# vi ~/.bash_profile
***Story continues in vi editor***
GOROOT=$GOROOT:/usr/local/go
GOPATH=$GOPATH:/usr/local/go/src
...
[your regular PATH stuff here]
...
确保二进制路径位于.bash_profile
的路径中PATH = $ PATH:$ HOME /斌:在/ usr / local / bin目录:在/ usr /本地/去/ bin中
此PATH可以是一个需要的字符串...以冒号分隔新项目:
退出vi编辑器并保存bash配置文件(:wq代表写入和退出)
[esc]
[shift] + [:]
:wq
您必须退出终端并重新登录才能重新启动个人资料。或者您可以使用导出启动它。
...$# export GOPATH=/usr/local/go/src
您可以验证go env:
...$# go env
耶!
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/usr/local/go/src"
GORACE=""
GOROOT="/usr/local/go"
现在你可以sudo和go能够在go / src中下载和创建目录,你可以了解你想要完成的工作。
示例
# sudo go get github.com/..
现在你会遇到另一个问题..你可能没有安装git ..这是另一个冒险.. :)
答案 21 :(得分:0)
〜.profile文件的末尾添加::
export GOPATH="$HOME/go"
export PATH="$PATH:/usr/local/go/bin"
export PATH="$PATH:$GOPATH/bin"
答案 22 :(得分:-1)
此脚本将帮助您切换Gopath。 https://github.com/buffonomics/goswitch
答案 23 :(得分:-1)
您必须根据使用的终端(bash或zsh)更新PATH。
~/.bashrc
或~/.zshrc
vi ~/.zshrc (or) code ~/.zshrc
export GOPATH=$HOME/go:/$HOME/projects/go
在这里,您可以将系统中GO项目中不同位置的一个或多个用分号:
分隔的路径添加到GOPATH
环境变量,即/path/1:path/2:path/3
等。
就我而言,我添加了2条路径,如上所示,一条来自根$HOME/go
,另一条来自项目目录:/$HOME/projects/go