我试图像这样安装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


当前回答

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

另外,当尝试使用vgo工作时,得到了跟随错误:

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

删除GOROOT,更新我的GOPATH和导出GO111MODULE=“on”解决了这个问题。

看这里

GOPATH可以设置为一个以冒号分隔的路径列表,其中可以找到Go代码、包对象和可执行文件。 设置GOPATH使用goinstall在Go树之外构建和安装自己的代码和外部库(并避免编写makefile)。

其他回答

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

另外,当尝试使用vgo工作时,得到了跟随错误:

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

删除GOROOT,更新我的GOPATH和导出GO111MODULE=“on”解决了这个问题。

看这里

GOPATH可以设置为一个以冒号分隔的路径列表,其中可以找到Go代码、包对象和可执行文件。 设置GOPATH使用goinstall在Go树之外构建和安装自己的代码和外部库(并避免编写makefile)。

答案很多,但没有实质内容,就像机器人对系统中的内容进行剪切和粘贴。不需要将GOROOT设置为环境变量。但是,有必要设置GOPATH环境变量,如果没有设置,则默认为${HOME}/go/ folder。

您必须注意的是PATH环境变量,因为这个变量可以改变您的go版本。不是GOROOT !忘记GOROOT。

现在,如果你切换或更改到一个新的go版本,你下载的包将使用默认的$HOME/go文件夹,它将与你之前的go版本混合。这可不太好。

因此,这就是需要定义GOPATH的地方,以便隔离新go版本的下载包。

总之,忘掉GOROOT吧。多想想GOPATH。

通常不应该显式地设置GOROOT。go命令根据它自己的目录位置自动识别适当的GOROOT。


GOPATH默认为$HOME/go。只有当你想把它放在其他地方时,你才需要显式地设置它。

GOPATH包含:

使用go install安装的二进制文件,位于$GOPATH/bin.¹ 可以使用GOBIN环境变量覆盖该位置。 下载的模块源代码和校验和的缓存,位于$GOPATH/pkg/mod。 这个位置可以使用GOMODCACHE环境变量来覆盖。

如果同时设置了GOBIN和GOMODCACHE,而没有设置GO111MODULE=off,那么GOPATH本身应该基本上没有影响。


另外,在传统的GOPATH模式下(也设置了GO111MODULE=off), GOPATH包含:

用于构建包的源代码,存储在根目录树$GOPATH/src中。 使用go install安装的非二进制文件,位于$GOPATH/pkg。 安装非二进制包不再特别有用:go命令有一个构建工件的缓存,从go 1.12开始,即使是在GOPATH模式下,这也是必需的。 构建缓存不在GOPATH中。它的位置可以用GOCACHE环境变量设置。


¹二进制文件也可以在go 1.17及更早的版本上使用go get安装,但go install优先于go 1.16;见https://golang.org/doc/go1.16。

GOPATH的讨论如下:

GOPATH环境变量 GOPATH可以设置为一个以冒号分隔的路径列表,其中Go 可以找到代码、包对象和可执行文件。 设置GOPATH使用goinstall来构建和安装您自己的代码和 Go树之外的外部库(并避免写入 makefile)。

这里讨论的是GOROOT:

$GOROOT Go树的根,通常是$HOME/ Go。默认为 目录的父目录。Bash运行。如果你选择不去的话 设置$GOROOT时,必须运行gomake而不是make或gmake 使用传统的makefile开发Go程序。

在osx中,我安装了brew,下面是适合我的设置

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

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