401

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

24 回答 24

383

GOPATHcmd/go文档中讨论:

GOPATH环境变量列出了查找 Go 代码的位置。在 Unix 上,该值是一个冒号分隔的字符串。在 Windows 上,该值是以分号分隔的字符串。在计划 9 中,值是一个列表。

GOPATH必须设置为在标准 Go 树之外获取、构建和安装包。

GOROOT在安装说明中讨论:

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

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

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

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

Chris Bunch 答案的更新版本。)

于 2012-06-01T08:46:02.600 回答
120

这是我的简单设置:

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

于 2014-12-23T08:44:33.223 回答
80

第一次运行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
于 2016-03-13T03:55:32.847 回答
43

GOPATH在这里讨论:

环境GOPATH变量

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

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

并在这里GOROOT讨论:

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

于 2011-11-01T19:01:29.170 回答
20

我阅读了go help gopath文档并且仍然非常困惑,但是从另一个 go doc 页面找到了这个小块:

GOPATH 环境变量指定工作区的位置。它可能是您在开发 Go 代码时需要设置的唯一环境变量。

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

于 2013-09-06T01:09:33.847 回答
12

GOPATH 不应指向Go 安装,而是指向您的工作区(请参阅https://golang.org/doc/code.html#GOPATH)。每当您使用 go get 或 go install 安装某些软件包时,它都会落在 GOPATH 中。这就是为什么它警告你,你绝对希望来自互联网的随机包被转储到你的官方安装中。

于 2015-06-12T03:13:27.717 回答
11

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

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

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

于 2016-10-25T11:03:59.683 回答
7

具体来说GOROOT,Go 1.9 会自动将其设置为其安装路径。
即使您安装了多个 Go,调用 1.9.x 的一个也会设置GOROOT/path/to/go/1.9(之前,如果未设置,它假定默认路径,如/usr/local/goor c:\Go)。

请参阅CL Go 评论 53370

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

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

于 2017-08-06T06:52:52.407 回答
7

您通常不应该GOROOT明确设置。该命令根据自己的目录位置自动go识别适当的。GOROOT


GOPATH默认为$HOME/go. 如果你想把它放在其他地方,你只需要明确地设置它。

GOPATH包含:

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

如果你同时设置GOBINand GOMODCACHE,并且不设置GO111MODULE=off,那么GOPATH它本身应该基本上没有效果。


此外,在 legacyGOPATH模式下(GO111MODULE=off也设置了时),GOPATH包含:

  • 用于构建包的源代码,存储在以$GOPATH/src.
  • 使用 安装的非二进制文件go install,位于$GOPATH/pkg.
    • 安装非二进制包不再特别有用:该go命令有一个构建工件的缓存,从 Go 1.12 开始甚至在GOPATH模式下也需要它。
    • 构建缓存不在. GOPATH它的位置可以通过GOCACHE环境变量来设置。

¹ 二进制文件也可以go get在 Go 1.17 及更早版本上安装,但从go installGo 1.16 开始是首选;见https://golang.org/doc/go1.16

于 2021-07-09T15:39:39.037 回答
6

正如刚才提到的:

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

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

set GOPATH=D:\my_folder_for_go_code\

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

cd %GOPATH%
于 2014-08-11T07:59:17.420 回答
5

在现代 Go 中,您不需要设置GOPATHGOROOT. 事实上,除非您正在做一些非常专业的事情,否则最好在您的系统上取消设置它们。

使用 Go 模块安装 Go后,选择您要工作的目录。然后:

$ mkdir example
$ cd example
$ go mod init example.com

请注意,模块名称example.com是任意的;如果您将工作保留在 GitHub 上,则可能类似于github.com/your-username/project-name.

最后一个命令将创建一个go.mod文件;现在您可以通过以下方式获取依赖项go get

$ go get rsc.io/quote

现在您的代码使用此依赖项:

$ touch main.go

把它放在main.go

package main

import (
    "fmt"

    "rsc.io/quote"
)

func main() {
    fmt.Println(quote.Go())
}

并运行:

$ go run .

Wrt original question,你现在可以得到你的doozer依赖:

$ go get github.com/ha/doozer

现在您可以doozer在代码中使用该模块。等等。您还可以检查go.mod目录中的文件以查看列出的依赖项及其版本。每个模块都是自包含的,有自己的依赖版本。您可以将两个模块并排放置,每个模块都有自己的go.mod文件指向某些依赖项的不同版本 - 由于模块之间的隔离,这一切都可以正常工作。

有关更多信息,请从此处的官方教程开始。在几个章节中,它会引导您完成上面显示的步骤,以及编写您自己的可重用模块和包,并从其他模块导入它们。其他交互式教程可在https://play-with-go.dev/获得

于 2021-07-02T14:08:50.603 回答
4

很多答案,但没有实质内容,比如机器人在他们系统上的内容上进行剪切和粘贴。无需设置GOROOT为环境变量。但是,设置环境变量是有益GOPATH的,如果不设置,则默认为${HOME}/go/文件夹。

PATH你必须注意的是环境变量,因为这个变量是可以改变你的go version. 不是GOROOT!忘了GOROOT

现在,如果您切换或更改为新的go version,您下载的包将使用默认$HOME/go文件夹,它会与您之前的文件夹混淆go version。情况不妙。

因此,这是GOPATH您需要定义的地方,以便隔离下载的新go version.

总之,忘记GOROOT。多想想GOPATH

于 2021-02-11T14:43:53.203 回答
2

GOPATHGOROOT配置折旧。

您可以改用 GO 模块。

例如:

mkdir go_app
cd go_app
go mod init go_app
于 2021-08-19T20:54:43.397 回答
1

运行go help environment它具有可以通过go env命令列出的每个环境变量的文档

于 2021-08-03T06:53:32.833 回答
1

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

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

go如果您更改.gopath.go.

我希望他们能按照rust/cargo这些家伙的做法去做,把所有东西都放在一个地方。

于 2020-06-13T14:58:15.787 回答
0

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

setx GOPATH C:\mynewgopath
于 2020-02-15T13:50:06.917 回答
0

您不需要显式设置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)。

于 2019-07-10T20:42:01.453 回答
-1

我不得不附加

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

在 Mac OS X 上我的~/.bash_profile

于 2018-05-05T19:03:22.270 回答
-1

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

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

于 2019-01-28T10:37:36.647 回答
-1

对于所有新手来说,export GOPATH=$HOME/go如果您使用的是 Ubuntu 或go help gopath了解更多信息,他们可以做一个简单的事情。

于 2021-07-17T13:09:34.550 回答
-1

一旦安装了 Go lang,GOROOT 就是安装的根目录。

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

 GOROOT = C:\go

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

如果我的 Go 语言源代码位于 C:\Users\\GO_Workspace,那么您的 GOPATH 将如下所示:

 GOPATH = C:\Users\<xyz>\GO_Workspace
于 2019-05-17T14:22:07.970 回答
-2

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

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

GOROOT="/usr/local/Cellar/go/1.10/libexec"
于 2018-03-07T09:47:02.457 回答
-3

如果您使用的是发行版 go,则应指出包含文件的位置,例如:

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

(这是针对 Fedora 20 的)

于 2015-01-14T12:50:15.563 回答
-3

值应该是(MACOS):

GOROOT="/usr/local/go" --> all binaries file core go
GOPATH="/Applications/proyectos/go" --> the route to workspace (custom workspace)
于 2020-03-22T05:28:53.910 回答