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


当前回答

第一次运行go env。 如果你看到go没有安装,你可以通过homebrew或包和/或其他方式安装它。 如果您看到输出,那么您的Go已经安装。 它向你展示了所有已设置和未设置的env。

如果你看到GOROOT为空:

在我的电脑上:/usr/local/go/bin/go 然后export GOROOT=/usr/local/go

如果你看到GOPATH为空:

在计算机的任何位置为go项目创建任意目录,在我的例子中是:~/GO_PROJECTS 然后导出GOPATH=~/GO_PROJECTS

其他回答

这里有一个解决方案(单用户):

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

如果你把。gopath改成。Go, Go会报错。

我希望他们能像运货员那样,把所有东西都放在一个地方。

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

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

(这是针对Fedora 20)

通常不应该显式地设置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。

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

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

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

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

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

GOPATH的讨论如下:

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

这里讨论的是GOROOT:

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