GOPATH和GOROOT的值应该是多少?


323

我正在尝试像这样安装doozer

$ goinstall github.com/ha/doozer

我得到这些错误。

goinstall: os: go/build: package could not be found locally
goinstall: fmt: go/build: package could not be found locally
goinstall: io: go/build: package could not be found locally
goinstall: reflect: go/build: package could not be found locally
goinstall: math: go/build: package could not be found locally
goinstall: rand: go/build: package could not be found locally
goinstall: url: go/build: package could not be found locally
goinstall: net: go/build: package could not be found locally
goinstall: sync: go/build: package could not be found locally
goinstall: runtime: go/build: package could not be found locally
goinstall: strings: go/build: package could not be found locally
goinstall: sort: go/build: package could not be found locally
goinstall: strconv: go/build: package could not be found locally
goinstall: bytes: go/build: package could not be found locally
goinstall: log: go/build: package could not be found locally
goinstall: encoding/binary: go/build: package could not be found locally

3
@Motin以上链接不再有效
Jorrit Reedijk 2015年

该文件已成为该项目的过时文件。与OSX相关的相关问题位于:github.com/go-lang-plugin-org/go-lang-idea-plugin/issues/841
Motin,2015年

注意:默认情况下,GOPATH将在Go 1.8(2017)中为您设置。请参阅下面的答案
VonC

是的,我也发现这些令人困惑的godocs的组织方式。这有所帮助:albertech.blogspot.com/2017/01/…–
jar

1
@BenyaminJafari,因为goinstall它确实是古代Go1 之前的历史,并且自2012
Dave C

Answers:


310

GOPATHcmd/go文档中进行了讨论:

GOPATH环境变量列表地方寻找Go代码。在Unix上,该值为冒号分隔的字符串。在Windows上,该值为分号分隔的字符串。在计划9中,该值是一个列表。

GOPATH 必须设置为获取,构建和安装标准Go树之外的软件包。

GOROOT安装说明中讨论:

Go二进制发行版假定它们将被安装在Windows 中 /usr/local/go(或c:\Go在Windows下),但是可以将Go工具安装到其他位置。在这种情况下,您必须将GOROOT环境变量设置 为指向其安装目录。

例如,如果您安装了转到主目录,则应将以下命令添加到$HOME/.profile

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

注意: GOROOT仅在安装到自定义位置时才必须设置。

克里斯·邦奇答案的更新版本。)


44
有关GOPATH的更全面的信息,请参见如何编写Go代码。 需要掌握信息才能理解该go命令,这对于使用Go至关重要。例如,goinstall现在应该在OP中使用go get
索尼娅2012年

13
另请注意go的实际安装路径。例如,在默认的自制程序设置中,自制程序将安装go in /usr/local/Cellar/go/。在这种情况下,导出路径应使用export GOROOT=/usr/local/Cellar/go/{version}和设置export PATH=$PATH:$GOROOT/bin
ekillaby

10
我必须做些export GOROOT=/usr/local/Cellar/go/1.2/libexec/让我与Brew一起工作。
史蒂文·索罗卡

我不建议进行此修改,因为该应用程序抱怨我的编辑“似乎包含”未格式化的代码(不是这样;非常感谢),但是:
通配符

从Go 1.10开始,如果未设置GOROOT,则go工具将尝试通过自己的位置进行查找。我也无法粘贴链接,因为粘贴在Stack Exchange的iOS应用中不起作用。现在非常沮丧。
通配符

97

这是我的简单设置:

directory for go related things: ~/programming/go
directory for go compiler/tools: ~/programming/go/go-1.4
directory for go software      : ~/programming/go/packages

GOROOT,GOPATH,PATH设置如下:

export GOROOT=/home/user/programming/go/go-1.4
export GOPATH=/home/user/programming/go/packages
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

因此,简而言之:

GOROOT用于来自go安装的编译器/工具。
GOPATH用于您自己的go项目/第3方库(通过“ go get”下载)。


我认为这个答案更容易理解,因为有针对文件夹结构的映射。
h-rai

GOPATH是否包括整个项目树(例如git)和不可用的文件-例如图像,脚本,构建文件等?
Serge Merzliakov,

52

首先运行go env
如果您发现go尚未安装,则可以通过homebrew或通过软件包和/或其他方式来安装它。
如果看到输出,则Go表示已安装。
它向您显示所有已设置和未设置的环境。

如果您看到的空白GOROOT

  1. 运行which go(在我的电脑:/usr/local/go/bin/go
  2. 然后像这样导出 export GOROOT=/usr/local/go

如果您看到的空白GOPATH

  1. 在我的情况下,在计算机上的任何地方创建任何目录用于go项目: ~/GO_PROJECTS
  2. 然后 export GOPATH=~/GO_PROJECTS

2
which go为我做了。它使用Chocolatey之前的安装使用了另一个go安装位置。删除该文件夹并将其从PATH变量中删除。现在可以了。谢谢!
斯嘉

which go该命令在Windows 7中对我不起作用。如何找到应在哪里运行此命令
firstpostcommenter18年

相应的Windows命令是where go它将向您显示已执行文件的路径
Falco

export GOPATH=~/GO_PROJECTS做了工作
Thamaraiselvam

39

GOPATH这里讨论:

GOPATH环境变量

GOPATH 可以设置为以冒号分隔的路径列表,在其中可以找到Go代码,包对象和可执行文件。

设置GOPATH为使用goinstall在Go树之外构建和安装您自己的代码和外部库(并避免编写Makefile)。

GOROOT这里讨论:

$GOROOT通常是围棋树的根$HOME/go。默认all.bash为运行目录的父目录。如果选择不设置$GOROOT,则在使用常规makefile开发Go程序时必须运行gomake而不是make或gmake。


因此,如果我已经安装在〜/ projects / go上,那么该变量的值应该是什么才能找到os,fmt等?
jshen 2011年

2
那么,您何时将Go安装在sudo apt-get install golang哪里?
weberc2 2013年

9
@ weberc2如果您运行go env,则应该看到该信息,对我来说是/usr/lib/go/
Andre

19

我阅读了go help gopath文档,但仍然感到非常困惑,但是在另一个go doc页面上发现了这个小块:

GOPATH环境变量指定工作空间的位置。在开发Go代码时,很可能需要设置唯一的环境变量。

http://golang.org/doc/code.html#GOPATH


10

该GOPATH应该指向转到安装,而是你的工作空间(见https://golang.org/doc/code.html#GOPATH)。每当您使用go get或go install安装某个软件包时,它将落入GOPATH中。因此,它警告您,您绝对希望将来自互联网的随机软件包转储到您的正式安装中。


9

从go 1.8(Q2 2017)开始,GOPATH将默认为您设置为$ HOME / go

请参阅问题17262和Rob Pike的评论:

$HOME/go这将是。
没有唯一的最佳答案,但这又简短又甜美,选择该名称(如果$HOME/go已经存在)可能只是一个问题,这只会让已经安装并且会理解的专家感到高兴GOPATH


如此简单的话题如何变得如此复杂!感谢您的最佳答案。
dodgy_coder

@dodgy_coder其实...看一下我的其他答案的前两行:stackoverflow.com/a/37905102/6309 ;)最终可能会变得更简单:根本没有GOPATH!有关更多详细信息,请参见stackoverflow.com/a/48914523/6309
VonC '18

是的,我同意,如果您使用默认值,则不是真的需要GOPATH,对吗?我仍然需要设置它,因为Google App Engine(Go标准)开发环境需要它。他们实际上告诉您设置GOPATH,但没有告诉您将其设置为什么值。
dodgy_coder

@dodgy_coder是的,默认情况下,Go将以固定的预定值查找项目PATH。
VonC

6

正如刚才提到的:

GOPATH环境变量指定工作空间的位置。

对于Windows,这对我有用(在Ms-dos窗口中):

set GOPATH=D:\my_folder_for_go_code\

这将创建一个Ms-dos可以识别的GOPATH变量,如下所示:

cd %GOPATH%

3

至于GOROOT具体而言,围棋1.9会自动将其设置为它的安装路径。
即使您安装了多个Go,调用1.9.x也会设置GOROOT/path/to/go/1.9(在未设置之前,它会假定默认路径为/usr/local/goc:\Go)。

请参阅CL Go评论53370

go tool现在,它将使用调用它的路径来尝试定位Go安装树的根
这意味着,如果整个Go安装都移到了新位置,则go tool应当继续照常工作。

可以通过GOROOT在环境中进行设置来覆盖它,这仅应在特殊情况下进行。
请注意,这不会影响runtime.GOROOT()函数的结果,该函数将继续报告原始安装位置;这可能会在以后的版本中修复。


0

从2020年和Go 1.13版开始,在Windows中,更新GOPATH的最佳方法是在命令提示符下键入:

setx GOPATH C:\mynewgopath

0

这是一种解决方案(单用户):

GOROOT=$HOME/.local # your go executable is in $GOROOT/bin
GOPATH=$HOME/.gopath
PATH=$GOROOT/bin:$GOPATH/bin:$PATH

go如果您更改.gopath为,则会抱怨.go

我希望他们跟大家rust/cargo一样,把所有东西都放在一个地方。


-1

在osx中​​,我安装了brew,这是适合我的设置

GOPATH="$HOME/my_go_work_space" //make sure you have this folder created

GOROOT="/usr/local/Cellar/go/1.10/libexec"

-1

我不得不追加

export GOROOT=/usr/local/Cellar/go/1.10.1/libexec

到我在Mac OS X上的〜/ .bash_profile


-1

还有一种情况,当我们使用go时,它会编译所有go文件。

假设我们有一个文件main.go,后来我们将当前文件更改为main_old.go,然后添加了新的main.go文件。然后,当我们构建应用程序时,所有go文件都会被编译。因此发生的错误可能是由于其他一些go文件中的编译错误所致。


-1

安装Go lang后,GOROOT是安装的根目录。

当我在Windows C:\目录中分解Go Lang二进制文件时,我的GOROOT应该是C:\ go。如果与Windows安装程序一起安装,则可能是C:\ Program Files \ go(对于64位程序包,可能是C:\ Program Files(x86)\ go)

 GOROOT = C:\go

而我的GOPATH是Go lang源代码或工作区的位置。

如果我的Go lang源代码位于C:\ Users \\ GO_Workspace,则您的GOPATH将如下所示:

 GOPATH = C:\Users\<xyz>\GO_Workspace

-1

您不需要显式设置 GOROOT(现代版本的Go可以根据您运行的go二进制文件的位置自行解决)。

另外,尝试使用时,出现跟随错误vgo

go: modules disabled inside GOPATH/src by GO111MODULE=auto; see 'go help modules'

删除GOROOT,更新我的GOPATH并 export GO111MODULE="on"解决了该问题。

GOPATH在这里看到

可以将GOPATH设置为以冒号分隔的路径列表,在其中可以找到Go代码,包对象和可执行文件。

设置GOPATH以使用goinstall在Go树之外构建和安装您自己的代码和外部库(并避免编写Makefile)。



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.