GOPATH和GOROOT的价值应该是什么?

我正在尝试像这样安装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 

cmd/go文档中讨论了GOPATH

GOPATH环境variables列出了寻找Go代码的地方。 在Unix上,该值是冒号分隔的string。 在Windows上,该值是以分号分隔的string。 在计划9中,该值是一个列表。

必须设置GOPATH才能在标准Go树之外获取,构build和安装软件包。

在安装说明中讨论GOROOT

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

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

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

注意:只有在安装到自定义位置时,才能设置GOROOT

( Chris Bunch的答案的更新版本。)

这是我的简单设置:

 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 get”下载)。

GOPATH在这里被讨论:

GOPATH环境variables

GOPATH可能被设置为冒号分隔的path列表,其中可以findGo代码,包对象和可执行文件。

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

这里讨论GOROOT

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

我读了go help gopath文档,仍然令人难以置信的困惑,但发现从另一个去doc页这个小块:

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

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

首先运行go env
如果你看到没有安装,你可以通过自制软件或通过软件包和/或其他方式安装。
如果你看到输出,那么你的安装。
它显示你所有的设置,而不是。

如果你看到空的GOROOT:

  1. 运行`哪去`(在我的电脑上:/ usr / local / go / bin / go)
  2. 然后像这样export GOROOT = / usr / local / go

如果您看到GOPATH为空:

  1. 在我的情况下,在计算机上的任何位置创build任何目录:〜/ GO_PROJECTS
  2. 然后导出GOPATH =〜/ GO_PROJECTS

正如刚才提到的:

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

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

 set GOPATH=D:\my_folder_for_go_code\ 

这将创build一个GOPATHvariables,Ms-dos在使用时可以识别如下:

 cd %GOPATH% 

GOPATH不应指向Go安装,而应指向您的工作空间(请参阅https://golang.org/doc/code.html#GOPATH )。 每当你安装一些软件包去安装,它会在GOPATH内着陆。 这就是为什么它警告你,你绝对不想从互联网随机包被转储到你的官方安装。

从1.8(2017年第二季度)开始,GOPATH将默认设置为$ HOME / go

见问题17262和Rob Pike的评论:

$HOME/go
没有单一的最佳答案,但这是简短而又甜蜜的,如果$HOME/go已经存在,那么select这个名字只会是一个问题,只有那些已经安装了GOPATH专家才会开心。

关于GOROOT ,Go 1.9会自动将其设置为安装path。
即使你已经安装了多个Go,调用1.9.x将会把GOROOT设置为/path/to/go/1.9 (之前,如果没有设置的话,它假设一个默认的path如/usr/local/go或者c:\Go )。

请参阅CL Go Review 53370 :

go tool现在将使用从中调用的path来尝试定位Go安装树的根目录
这意味着如果整个Go安装被移到新的位置,那么go tool应该照常继续工作。

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

如果您正在使用发行版,则应指向包含文件的位置,例如:

 $ rpm -ql golang | grep include /usr/lib/golang/include 

(这是Fedora 20)