如何在Ubuntu上设置GOPATH环境变量?我必须编辑什么文件?


258

我正在尝试做一个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,如何以及在哪里设置?

我看到许多线程都提到了此错误,但是没有一个线程提供了我的问题的答案,需要编辑哪个文件才能为此路径提供值?


您正在使用什么外壳?
2014年

3
除了关于将其设置为什么的答案之外,请参见此SO答案,该答案阐明了GOPATH是什么,以及通常应如何使用它
Louis Maddox



1
注意:Go 1.8+(2017年第二季度)将为GOPATH您设置:请参阅下面的我的答案
VonC

Answers:


284

新方法:

看看这个答案。

旧方法:

只需将以下行添加到〜/ .bashrc中,这将继续存在。但是,您可以将其他路径用作GOPATH而不是示例中的$ HOME / go

export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

14
路径/usr/share/go在我的Ubuntu 13.10上。
tsusanka 2014年

35
不要使用/ usr / share / go。GOPATH是go的“工作区”,可在其中下载软件包等。创建一个新目录并使用它。我推荐〜/ .go
Bryan Larsen

16
如user2128535的回答中所述,GOROOT应该设置为/ usr / lib / go
2015年


12
请记住$ source ~/.bashrc;)
eversor

65

Ubuntu 14.04

export GOPATH=$HOME/go

另外,您可以将此字符串添加到文件中

$HOME/.bashrc

1
您的评论令人困惑,因为它指的是原始答案的现已删除的一行。
Marcel Burkhard

mkdir -p〜/ go / bin export GOPATH =〜/ go export PATH = $ PATH:$ GOPATH / bin:
Alex Punnen

61

GOPATH应该设置为新创建的空目录。这是转到“工作区”,在这里下载软件包等。我使用〜/ .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/


1
非常感谢
Dylan B

35

新方法:Go模块

从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环境变量。


34

例如,如果是Ubuntu,则在安装软件包后:

$sudo apt install golang -y

只需将以下行添加到〜/ .bashrc(针对您的用户)

export GOROOT=/usr/lib/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

19
export GOPATH=/path/desired/here

无需编辑任何文件,我们只需使用上面的命令即可直接编辑Go环境变量。


11
但是,这不是持久的。如果您希望保留此选项(可能会保留),则必须将其添加到登录时正在加载的某些文件中。
立方2014年

1
谢谢!大多数用户从未想到的是有人开始使用linux,并且如果没有文档说明您所说的话(因为每个人都认为这是已知事实),我们将如何学习/查找信息?
PlayHardGoPro

19

在终端中编写此代码。

export GOPATH=path/to/your/gopath/directory

注意:这将在每个新的“终端”窗口或系统重新启动时重置。

为了保持持久性,请根据您的外壳将以下代码粘贴到您的.zshrc.bashrc文件中。这些文件在您的主目录中。如下所示。

export PATH=path/to/some/other/place/composer/for/example
export GOPATH=path/to/your/gopath/directory
export PATH=$PATH:$GOPATH/bin

11

您稍后也将需要GOPATH。因此,将其添加到中~/.bashrc


10
是的,我想到了这一点,但是却忽略了一个人拥有一个带有自定义外壳的Ubuntu盒子,却不太可能知道的可能性的可能性:-)
Vytautas Shaltenis 2014年

9

如果您设置了需要修改环境变量的任何内容,例如Java,Go等,这将是非常熟悉的。

我将假定您在Go路径中的某处具有以下目录结构:

\---[folder name]
    +---bin
    +---pkg
    \---src
  • 打开一个新的终端
  • 类型 sudo nano /etc/environment
  • 找到PATH=...并结束它,并:在最后一条路径后添加一个冒号,然后粘贴到完整的go path示例中/home/user/gocode

并且您完成了,这应该使它在系统中具有持久性。


1
我看不出为什么go可以为David工作时更改$ PATH。他需要设置$ GOPATH(请参见Daniel Lin的回答)。David可以合并两种方法(或在/ etc / profile或$ HOME / .profile中进行设置)。顺便说一下,我建议David阅读以下链接:golang.org/doc/install golang.org/doc/code.html#GOPATH
zk82

2
@ zk82 $ GOPATH是一个环境变量,我不明白为什么要编辑环境变量以将此变量添加到其中的问题。$ JAVA_HOME和其他需要这种配置的框架也是如此。
2014年

好的我明白了。谢谢你的评论。
zk82 2014年

3

这就是使用以下命令在Ubuntu 15.10上为我工作的原因fish shell

# ~/.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

3

go path可能是您想要的每个位置,只需创建一个目录并以您的环境的GOPATH名称设置全局路径变量。

mkdir ~/go
export GOPATH=~/go
go get github.com/go-sql-driver/mysql

2

使用Go 1.8(Q2 2017),如果您接受默认GOPATH值(为您设置),则无需编辑任何文件

$HOME/go

您可以查看有关问题17262的评论以及相关的Twitter投票

通过选择默认值GOPATH,我们可以简化我们的文档,因为我们可以说类似

$ go get github.com/foo/bar

会将签入github.com/foo/bar仓库签出$HOME/go/src/github.com/foo/bar

我们不需要设置环境变量来分散新来者的注意力,我们要做的只是在页面底部加一个小括号

$HOME/go是go工作区的默认路径。
如果要更改此路径,请设置GOPATH变量为您选择的内容。


2

我的环境与您的环境相似。

$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

我在某处读到将GOPATH设置为与安装目录相同的想法不是一个好主意。Oo
ankush981

2

GOPATH是您工作空间位置的环境变量。 GOROOT是安装目录的环境变量。尽管在安装期间会自动设置GOROOTGOPATH(如果没有错误),但是要手动指定它,您可以按照以下过程进行操作。此外,有关更多信息,您可以参考GO的Wiki页面

最好将GOPATH设置为主目录中的目录,例如$ HOME / go,%USERPROFILE%\ go(Windows)。

  1. 这是一个解决方案mac,已在macOS Sierra版本上进行了测试。10.12以及Gogland-EAP中,JetBrains已将其作为Go编程的IDE引入。

在您的终端机上

vim ~/.profile

在终端上打开的文档中,按i并添加以下路径

GOPATH=/path/to/a/directory/inside/home/directory
GOROOT=/path/to/you/go/library
PATH=$PATH:$GOPATH:$GOROOT:$GOROOT/bin

ESC并输入:x。最后,您应该重新启动(关闭打开)终端或再次注销并重新登录

  1. 对于Windows和Linux配置,请参阅Githab上的Go wiki页面上的设置GOPATH-Golang

注意请勿将GOROOTGOPATH都设置在同一目录中,否则会出现警告。


2
export GOROOT=/usr/lib/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin

您可能需要通过$ go env检查


2

(Ubuntu)

如果您未设置GOPATH,则将使用默认值。

您必须将$ GOPATH / bin添加到PATH中才能执行$ GOPATH / bin中安装的任何二进制文件,或者您需要键入$ GOPATH / bin / the-command。将此添加到您的〜/ .bash_profile

export PATH=$GOPATH/bin:$PATH

当前的GOPATH命令:

go env GOPATH

更改GOPATH命令:

export GOPATH=$HOME/your-desired-path


0

这是最令人讨厌的事情。希望节省您的时间。

如果以root用户身份安装了go。系统bash_profile文本文件〜/ .bash_profile的根用户需要将$ 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 / bin:/ usr / local / bin:/ usr / local / go / bin

这个PATH可以是一个字符串,只要它是长度即可。

退出vi编辑器并保存bash配置文件(:wq代表写入和退出)

  [esc] 
  [shift] + [:] 
  :wq

您必须注销终端,然后重新登录以使配置文件再次启动..或者您可以通过使用export来启动它。

...$# 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 ..那是另一项冒险.. :)


不要这样 不是要编译的东西为根,你希望go get把事情附近的任何地方GOROOT
Dave C

普通用户如何进行一次跑步?非常感谢。在安装过程中一切都没有完成,我最终使用了测试虚拟机来试用GO。
user3151532

0

在我的Fedora 20机器上,我在〜/ .bashrc中添加了以下几行:

export GOROOT=/usr/lib/golang
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

3
不要设定GOROOT。(除非您属于使用Go的二进制发行版的极少数人,但将其安装在非标准的地方。)
Dave C

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"

1
eval通常是一个坏主意,在这种情况下恕我直言矫枉过正
帕维尔Prażak

@PawełPrażak为什么?(我不是shell脚本专家)
DMaster

1
如果所评估的内容存在错误,后果可能很痛苦;这里的问题是如何出口GOPATH只有
帕维尔Prażak

0

编辑您的内容~/.bash_profile以添加以下行:

$ export GOPATH=$HOME/work

保存并退出编辑器。然后,将您的~/.bash_profile

$ source ~/.bash_profile

注意:设置GOBIN路径以在运行go install时生成二进制文件

$ export GOBIN=$HOME/work/bin


-1

官方指示中所写:

GOPATH环境变量指定工作空间的位置。默认情况下,该目录位于您的主目录内,因此在Unix上为$ HOME / go,在Plan 9上为$ home / go,在Windows上为%USERPROFILE%\ go(通常为C:\ Users \ YourName \ go)。如果您想在其他位置工作,则需要将GOPATH设置为该目录的路径。(另一种常见设置是设置GOPATH = $ HOME。)请注意,GOPATH不得与Go安装路径相同。

因此,例如,如果您要在Jetbrains Webstorm中进行编码(使用Go插件),则可能需要设置GOPATH/Users/<user>/WebstormProjects

用简单的话来说,将其设置为您希望Go项目驻留的任何位置。


-1

您可以像其他人所建议的那样使用“导出”解决方案。我想为您提供另一种解决方案,以提供永久的便利:运行Go命令时,您可以将任何路径用作GOPATH。

首先,您需要下载一个名为gosthttps : //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/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并运行命令。但请记住,你已经添加的路径进入gostpathspace。如果您在的子目录的任何级别下/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


-1

您必须根据使用的终端(bash或zsh)更新PATH。

  1. 打开终端的外壳脚本文件,即~/.bashrc~/.zshrc在编辑器中
   vi ~/.zshrc
      (or)
   code ~/.zshrc
  1. 如果已经找到,请更新下面的GOPATH或添加下面的行。

export GOPATH=$HOME/go:/$HOME/projects/go

在这里,您可以将一个或多个用分号分隔的路径:从系统上GO项目的不同位置添加到GOPATH环境变量,即/path/1:path/2:path/3例如etc)。

就我而言,我添加了2条路径,如上所示,一条来自根目录$HOME/go,另一条来自项目目录:/$HOME/projects/go

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.