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

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

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

635564 次浏览
export GOPATH=/path/desired/here

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

稍后您还将需要GOPATH。所以将它添加到~/.bashrc

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

我假设你有以下目录结构作为你的Go路径:

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

你就完成了,这应该会使它在系统中持久存在。

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/

Ubuntu 14.04

export GOPATH=$HOME/go

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

$HOME/.bashrc

这是最烦人的事情。希望能节省你的时间。

IF go是以root用户安装的。您系统的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: $ HOME / bin: / usr /地方/ bin: / usr /地方/去/ bin

这个PATH可以是它需要的长度的字符串..以添加新项,只需用冒号分隔:

exit vi editor and saving bash profile (:wq代表write and quit

  [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。这是另一次冒险…:)

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

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

这个脚本将帮助你切换哥帕特。https://github.com/buffonomics/goswitch

在终端中编写这段代码。

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

这就是使用fish shellUbuntu 15.10上为我工作的原因:

# ~/.config/fish/config.fish


set -g -x PATH /usr/local/bin $PATH
set -g -x GOPATH /usr/share/go

然后我不得不改变go文件夹的权限(它被设置为根)

sudo chown <name>:<name> -R /usr/share/go

使用Go 1.8 (Q2 2017),如果你接受默认的GOPATH值(为你设置),你就不必编辑任何文件。

$HOME/go

你可以看到发行17262相关推特投票上的注释:

通过选择默认的GOPATH,我们可以使我们的文档更容易,因为我们可以这样说

$ go get github.com/foo/bar

将检出github.com/foo/bar回购到$HOME/go/src/github.com/foo/bar

我们不需要用设置env变量来分散新人的注意力,我们所需要做的就是在页面底部放一个小圆括号

$HOME/go是你的go工作区的默认路径 如果你想改变这个路径,将GOPATH变量设置为你选择的值

go path可以是你想要的任何地方,只需要创建一个目录,并在GOPATH的名称中设置全局路径变量到你的环境。

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

以Ubuntu为例,安装包后:

$sudo apt install golang -y

只需将以下行添加到~/。bashrc(你的用户)

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

官方说明中所写:

GOPATH环境变量指定工作空间的位置。它默认在你的主目录中有一个名为go的目录,在Unix上是$home/go,在Plan 9上是$home/go,在Windows上是%USERPROFILE%\go(通常是C:\Users\YourName\go)。如果您希望在不同的位置工作,则需要将GOPATH设置为该目录的路径。(另一个常见的设置是设置GOPATH=$HOME。)注意,GOPATH不能与Go安装的路径相同。

例如,如果你在Jetbrains Webstorm中编码(使用去插件),你可能想要将GOPATH设置为/Users/<user>/WebstormProjects

简单地说,将其设置为您希望Go项目驻留的任何地方。

还有另一个解决方案:从go env导出每个GO*环境变量

. 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"

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

$ export GOPATH=$HOME/work

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

$ source ~/.bash_profile

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

$ export GOBIN=$HOME/work/bin

我的围棋环境看起来和你的差不多。

$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是工作空间位置的环境变量。 >是安装目录的环境变量。虽然GOROOTGOPATH是在安装期间自动设置的(如果没有错误的话),但要手动指定它,您可以遵循以下流程。此外,要了解更多信息,可以参考GO的维基页面

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

  1. 这是一个解决方案的mac,这是测试在macOS Sierra, ver。10.12,也在Gogland-EAP中,它是JetBrains作为Go编程的IDE引入的。

在终端类型上

vim ~/.profile

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

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上设置GOPATH-Golang的Go wiki页面。

谨慎不要将GOROOTGOPATH同时设置到同一个目录,否则会得到警告。

你可以使用“导出”解决方案,就像其他人建议的那样。我想为您提供另一个永久方便的解决方案:您可以在运行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的路径添加到pathspace 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...]

例如,你想用/home/foobar/bar作为GOPATH运行go get github.com/go-sql-driver/mysql,只需如下所示:

$ 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工具,可以帮助你管理gopathths和运行Go命令。有关如何使用它来运行其他Go命令的详细信息,您可以运行gost help goCmdName。例如,你想了解更多关于install的信息,只需输入下面的单词:

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

export GOROOT=/usr/lib/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin
你可能想检查一下 $ go env

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

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

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

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

在我的例子中,我添加了两条路径,如上所示,一条来自根目录$HOME/go,另一条来自项目目录:/$HOME/projects/go

(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

在~的结尾。配置文件添加::

export GOPATH="$HOME/go"
export PATH="$PATH:/usr/local/go/bin"
export PATH="$PATH:$GOPATH/bin"

走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 < / p >

只需将以下行添加到~ / . bashrc

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

如果您正在使用ZSH:

nano ~/.zshrc

然后在文件末尾添加:

export PATH=$PATH:/usr/local/go/bin

最后:

source ~/.zshrc

并打开一个新的终端

go version