繁体   English   中英

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

[英]How do I SET the GOPATH environment variable on Ubuntu? What file must I edit?

我正在尝试执行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 没有设置,我应该如何以及在哪里设置它?

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

新方法:

看看这个答案。

旧方式:

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

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

新方法: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 环境变量。

Ubuntu 14.04

export GOPATH=$HOME/go

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

$HOME/.bashrc

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/

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

$sudo apt install golang -y

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

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

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

在终端中编写此代码。

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

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

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

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

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

大功告成,这应该让它在系统中持久化。

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

这是得到它使用为我工作在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

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

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

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 都设置在同一个目录下,否则会收到警告。

(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

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

$HOME/go

你可以看到关于issue 17262的评论和相关的 twitter 投票

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

$ go get github.com/foo/bar

将检查github.com/foo/bar库到$HOME/go/src/github.com/foo/bar

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

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

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

$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
export GOROOT=/usr/lib/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin

你可能想通过 $ go env 检查

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

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

如果您使用的是 zsh:

nano ~/.zshrc

然后在文件末尾添加:

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

最后:

source ~/.zshrc

并打开一个新的终端

go version

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

如果 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..那是另一个冒险..:)

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

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

另一个解决方案:从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,则无需设置 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

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

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

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

正如官方说明中所写:

GOPATH 环境变量指定工作区的位置。 它默认为您的主目录中名为 go 的目录,因此在 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 项目驻留的任何位置。

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

例如,你想使用/home/foobar/bar作为 GOPATH 运行go get github.com/go-sql-driver/mysql 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 并运行命令。 但请记住,您已将路径添加到gost的路径空间中 如果您在/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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM