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

时间:2014-01-08 16:36:56

标签: linux ubuntu go

我正在尝试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,我如何以及在何处设置它?

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

24 个答案:

答案 0 :(得分:259)

2018+答案:

Check out this answer.

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 17262associated 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)。

  1. 这是一个解决方案mac,在macOS Sierra上测试,版本。 10.12,以及Gogland-EAP,它已作为JetBrains的Go编程IDE引入。
  2. 在您的终端类型

    <div>

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

    vim ~/.profile
    

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

    1. 有关Windows和Linux配置,请参阅位于Setting GOPATH-Golang的Githab的Go wiki页面。
    2. 注意不要将 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。

  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等。

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