【问题标题】:How do I SET the GOPATH environment variable on Ubuntu? What file must I edit?如何在 Ubuntu 上设置 GOPATH 环境变量?我必须编辑什么文件?
【发布时间】:2014-01-26 21:24:42
【问题描述】:

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

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

【问题讨论】:

标签: linux ubuntu go


【解决方案1】:

新方式:

Check out this answer.

老路:

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

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

【讨论】:

  • 我的 Ubuntu 13.10 上的路径是 /usr/share/go
  • 不要使用 /usr/share/go。 GOPATH 是 go 的“工作区”,它下载包等。创建一个新目录并使用它。我推荐 ~/.go
  • 如user2128535的回答中所说,GOROOT应该设置为/usr/lib/go
  • 记得$ source ~/.bashrc ;)
【解决方案2】:
推荐的答案 Go Language

新方式:Go 模块

从 Go 1.11 开始,您不再需要使用 GOPATH。只需转到您的项目目录并执行一次:

go mod init github.com/youruser/yourrepo
  • 这样,Go 在该目录中创建了一个模块根目录。
  • 您可以创建任意数量的模块。
  • 有关分步说明,另请参阅this answer

旧方式:GOPATH

如果您坚持使用 GOPATH,请注意:

  • 从 Go 1.8 开始,您无需设置 GOPATH 或 GOROOT。
  • GOPATH 默认位于您的用户/主目录下。

From the documentation:

如果没有设置 GOPATH,则在 Unix 系统上假定为 $HOME/go,在 Windows 上假定为 %USERPROFILE%\go。如果您想使用自定义位置作为您的工作区,您可以设置 GOPATH 环境变量。

【讨论】:

    【解决方案3】:

    Ubuntu 14.04

    export GOPATH=$HOME/go
    

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

    $HOME/.bashrc
    

    【讨论】:

    • 您的评论令人困惑,因为它指的是原始答案中现已删除的行。
    • mkdir -p ~/go/bin export GOPATH=~/go export PATH=$PATH:$GOPATH/bin:
    【解决方案4】:

    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/

    【讨论】:

    • 非常感谢
    【解决方案5】:

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

    $sudo apt install golang -y
    

    只需将以下行添加到 ~/.bashrc (Of your user)

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

    【讨论】:

    • 谢谢,我刚刚卸载了我以前的安装(当时没有使用),并做了你提供的。效果很好,谢谢:>
    【解决方案6】:
    export GOPATH=/path/desired/here
    

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

    【讨论】:

    • 这不是持久的。如果您希望保留此选项 - 您可能会这样做 - 您必须将其添加到登录时正在加载的某个文件中。
    • 谢谢!大多数用户从未想过有人从 linux 开始,如果没有文档说明您所说的(因为每个人都认为这是众所周知的事实)我们将如何学习/查找信息?
    【解决方案7】:

    在终端中编写此代码。

    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
    

    【讨论】:

      【解决方案8】:

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

      【讨论】:

      • 是的,我想到了这一点,但排除了一个人拥有一个带有自定义外壳的 Ubuntu 盒子并且不知道它的可能性极小 :-)
      【解决方案9】:

      对于 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

      【讨论】:

        【解决方案10】:

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

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

        \---[folder name]
            +---bin
            +---pkg
            \---src
        
        • 打开一个新终端
        • 输入sudo nano /etc/environment
        • 找到PATH=...,在最后一条路径后面加上一个冒号:,然后粘贴完整的go path,例如/home/user/gocode

        你已经完成了,这应该使它在系统中持久化。

        【讨论】:

        • 如果 go 对 David 有效,我不明白为什么要更改 $PATH。他需要设置 $GOPATH(见 Daniel Lin 的回答)。 David 可以合并这两种方法(或将其设置在 /etc/profile 或 $HOME/.profile 中)。顺便说一句,我建议大卫阅读这些链接:golang.org/doc/installgolang.org/doc/code.html#GOPATH
        • @zk82 $GOPATH 是一个环境变量,我不明白为什么编辑你的环境变量来添加这个变量是个问题。 $JAVA_HOME 和其他需要此类配置的框架也是如此。
        • 好的,我明白了。感谢您的评论。
        【解决方案11】:

        这就是它在 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
        

        【讨论】:

          【解决方案12】:

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

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

          【讨论】:

            【解决方案13】:

            GOPATH 是您工作空间位置的环境变量。 GOROOT 是安装目录的环境变量。虽然 GOROOTGOPATH 在安装过程中会自动设置(如果没有错误的话),要手动指定它,您可以按照以下过程进行。另外,更多信息可以参考GO's wiki page

            最好将 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 页面Setting GOPATH-Golang

            注意 不要将 GOROOTGOPATH 设置为同一目录,否则会收到警告。

            【讨论】:

              【解决方案14】:

              (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

              【讨论】:

                【解决方案15】:

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

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

                【讨论】:

                • 我正在使用 mac pro 16 (Intel) Big Sur 和 golang 版本 1.17.6,对我来说工作正常,更新到 .bashrc.bash_profile 然后 source .bashrc
                【解决方案16】:

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

                $HOME/go
                

                您可以在 issue 17262associated twitter vote 上看到 cmets:

                通过选择默认的GOPATH,我们可以使我们的文档更容易,因为我们可以说类似的东西

                $ go get github.com/foo/bar
                

                将查看github.com/foo/bar 回购到$HOME/go/src/github.com/foo/bar

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

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

                【讨论】:

                  【解决方案17】:

                  我的围棋环境看起来和你的很相似。

                  $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 设置为与安装目录相同是一个坏主意。 O.o
                  【解决方案18】:
                  export GOROOT=/usr/lib/go
                  export GOPATH=$HOME/go
                  export PATH=$PATH:$GOROOT/bin
                  

                  你可能想检查一下 $去环境

                  【讨论】:

                    【解决方案19】:

                    在 ~.profile 文件末尾添加::

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

                    【讨论】:

                      【解决方案20】:

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

                      如果 go 是作为 root 用户安装的。系统的 bash_profile 文本文件的 root 用户 ~/.bash_profile 需要将 $GOROOT 分配给 go install 目录,并且需要将 $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 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..那是另一个冒险..:)

                      【讨论】:

                      • 不要这样做。你确实想以root身份编译东西而你确实想要@ 987654327@ 将任何东西放在GOROOT 附近。
                      • 如何在普通用户下运行?非常感谢。在安装过程中事情没有解决,我最终使用了一个测试虚拟机来尝试 GO。
                      【解决方案21】:

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

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

                      【讨论】:

                      • Don't set GOROOT。 (除非您是极少数使用 Go 二进制发行版但将其安装在非标准位置的人。)
                      【解决方案22】:

                      另一个解决方案:从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"
                      

                      【讨论】:

                      • eval 在这种情况下通常是一个坏主意,而且在这种情况下,恕我直言,这是一种矫枉过正
                      • @PawełPrażak 为什么? (我不是 shell 脚本专家)
                      • 如果正在评估的内容存在错误,后果可能会很痛苦;这里的问题是如何只导出GOPATH
                      【解决方案23】:

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

                      $ export GOPATH=$HOME/work
                      

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

                      $ source ~/.bash_profile
                      

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

                      $ export GOBIN=$HOME/work/bin
                      

                      【讨论】:

                        【解决方案24】:

                        如果你使用的是最新版本的 Go,你不需要设置 GOPATH

                        GOPATH 最初用于告诉 Go 在哪里可以找到您使用的所有第三方包的来源。

                        但是,现在执行此操作的默认方式是 Go Modules

                        Go 模块从 1.11 开始在 Go 中可用。如果您使用的是该语言的当前版本之一,则根本不需要设置 GOPATH。

                        相反,只需告诉 Go 初始化模块:go mod init github.com/username/repo

                        这将创建一个 go.mod 文件,然后该文件将更改为记录您在代码中使用的任何第三方包。

                        这里有一些其他方便的命令:

                        • 整理依赖:go mod tidy
                        • 将所有依赖源的副本下载到供应商子文件夹:go mod vendor

                        这里有一个关于模块的方便教程:https://golang.org/doc/tutorial/create-module

                        【讨论】:

                          【解决方案25】:

                          此脚本将帮助您切换 Gopath。 https://github.com/buffonomics/goswitch

                          【讨论】:

                          • 不要盲目分享脚本。提及它的用例和场景。
                          【解决方案26】:

                          您可以像其他人建议的那样使用“导出”解决方案。为了永久方便,我想为您提供另一种解决方案:您可以在运行 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 工具,可以帮助你管理 GOPATH 和运行 Go 命令。有关如何使用它来运行其他 Go 命令的更多详细信息,您可以运行 gost help goCmdName。例如,您想了解更多关于install 的信息,只需在下面输入:

                          $ gost help install
                          

                          您还可以在项目的 README 中找到更多详细信息:https://github.com/byte16/gost/blob/master/README.md

                          【讨论】:

                            【解决方案27】:

                            您必须根据您使用的终端(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

                            【讨论】:

                              【解决方案28】:

                              official instructions中所写:

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

                              例如,如果您在 Jetbrains Webstorm 中编码(使用 Go plugin),您可能希望将 GOPATH 设置为 /Users/&lt;user&gt;/WebstormProjects

                              简而言之,将其设置为您希望 Go 项目驻留的任何位置。

                              【讨论】:

                                猜你喜欢
                                • 2013-11-20
                                • 1970-01-01
                                • 1970-01-01
                                • 2020-08-16
                                • 2020-12-30
                                • 1970-01-01
                                • 2020-04-12
                                • 2019-11-28
                                • 2012-07-02
                                相关资源
                                最近更新 更多