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。
首先运行go env
如果你看到没有安装,你可以通过自制软件或通过软件包和/或其他方式安装。
如果你看到输出,那么你的安装。
它显示你所有的设置,而不是。
如果你看到空的GOROOT:
- 运行`哪去`(在我的电脑上:/ usr / local / go / bin / go)
- 然后像这样export GOROOT = / usr / local / go
如果您看到GOPATH为空:
- 在我的情况下,在计算机上的任何位置创build任何目录:〜/ GO_PROJECTS
- 然后导出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)