ChatGPT解决这个技术问题 Extra ChatGPT

GOPATH 和 GOROOT 的值应该是什么?

我正在尝试像这样安装 doozer

$ goinstall github.com/ha/doozer

我得到这些错误。

goinstall: os: go/build: 本地找不到包 goinstall: fmt: go/build: 本地找不到包 goinstall: io: go/build: 本地找不到包 goinstall: 反映: go/build:本地找不到包 goinstall: math: go/build: 本地找不到包 goinstall: rand: go/build: 本地找不到包 goinstall: url: go/build: 本地找不到包 goinstall: net: go/build: 本地找不到包 goinstall: 同步: go/build: 本地找不到包 goinstall: 运行时: go/build: 本地找不到包 goinstall: 字符串: go/build: 包可以本地找不到 goinstall: 排序: go/build: 本地找不到包 goinstall: strconv: go/build: 本地找不到包 goinstall: bytes: go/build: 本地找不到包 goinstall: 日志: go/build: 在本地找不到包 goinstall: encoding/binary: go/build: 找不到包本地

@Motin 上面的链接不再有效
该文件对于该项目已过时。在这里可以找到与 OSX 相关的相关问题:github.com/go-lang-plugin-org/go-lang-idea-plugin/issues/841
注意:默认情况下,Go 1.8 (2017) 将为您设置 GOPATH。请参阅my answer below
使用 Go 1.9(2017 年第三季度),您无需再担心 GOROOT。请参阅my answer below
@BenyaminJafari 因为 goinstall 确实是 Go1 之前的古老版本,自 2012 年以来就不存在了。

C
Community

GOPATH 讨论 in the cmd/go documentation

GOPATH 环境变量列出了查找 Go 代码的位置。在 Unix 上,该值是一个冒号分隔的字符串。在 Windows 上,该值是以分号分隔的字符串。在计划 9 中,值是一个列表。 GOPATH 必须设置为在标准 Go 树之外获取、构建和安装包。

GOROOTthe installation instructions 中讨论:

Go 二进制发行版假定它们将安装在 /usr/local/go(或 Windows 下的 c:\Go)中,但可以将 Go 工具安装到不同的位置。在这种情况下,您必须将 GOROOT 环境变量设置为指向它的安装目录。例如,如果您将 Go 安装到您的主目录,则应将以下命令添加到 $HOME/.profile: export GOROOT=$HOME/go export PATH=$PATH:$GOROOT/bin 注意:只有在安装时才必须设置 GOROOT到自定义位置。

Chris Bunch's answer 的更新版本。)


关于 GOPATH 的更全面的信息位于 How to Write Go Code. 掌握理解 go 命令所需的信息,这对于使用 Go 至关重要。例如,在 OP 中使用的 goinstall 现在应该是 go get
还要注意 go 的实际安装路径。例如,在默认的 homebrew 设置中,homebrew 将在 /usr/local/Cellar/go/ 中安装 go。在这种情况下,应使用 export GOROOT=/usr/local/Cellar/go/{version}export PATH=$PATH:$GOROOT/bin 设置导出路径。
我必须做 export GOROOT=/usr/local/Cellar/go/1.2/libexec/ 才能让我使用 brew。
我无法建议此编辑,因为该应用程序抱怨我的编辑“似乎包含”未格式化的代码(它没有;非常感谢)但是:
从 Go 1.10 开始,如果 GOROOT 未设置,go 工具将尝试通过自己的位置来计算它。我也无法粘贴链接,因为粘贴在 Stack Exchange 的 iOS 应用程序中不起作用。现在非常沮丧。
E
EvgenijM86

这是我的简单设置:

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


我认为这个答案更容易理解,因为有一个针对文件夹结构的映射。
GOPATH 是否包含带有非 go 文件的整个项目树(例如 git) - 例如图像、脚本、构建文件等?
你能提供你的安装墙吗?我假设您使用 wget 下载 tar 文件并稍后解压缩?
R
Rstew

首先运行 go env
如果您看到 go 未安装,您可以通过 homebrew 或通过包和/或其他方式安装它。
如果您看到输出,那么您的 Go已安装。
它会显示所有已设置和未设置的环境。

如果您看到 GOROOT 为空:

运行 which go(在我的计算机上:/usr/local/go/bin/go)然后像这样导出 export GOROOT=/usr/local/go

如果您看到 GOPATH 为空:

在我的情况下,在计算机上的任何位置为 go 项目创建任何目录:~/GO_PROJECTS 然后 export GOPATH=~/GO_PROJECTS


which go 为我做的。它使用了之前使用 Chocolatey 安装的另一个 go 安装位置。删除了该文件夹并将其从 PATH 变量中删除。现在它起作用了。谢谢!
which go 命令在 Windows 7 中对我不起作用。如何找到应该在哪里运行此命令
对应的 windows 命令是 where go 它将显示执行文件的路径
export GOPATH=~/GO_PROJECTS 完成了工作
在 WSL2 中,它 which go 返回 /usr/bin/go,它是二进制文件,而不是目录。不知道该怎么办。
C
Chris Bunch

GOPATH 讨论 here

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

并且讨论了 GOROOT here

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


所以如果我已经安装在 ~/projects/go 中,该变量的值应该是什么来查找 os、fmt 等?
那么当您 sudo apt-get install golang 时,Go 会安装在哪里?
@weberc2 如果您运行 go env,您应该会看到该信息,对我来说是 /usr/lib/go/
M
Max

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

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

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


V
VonC

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

请参阅 issue 17262 和 Rob Pike 的评论:

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


这么简单的话题怎么会变得这么复杂!感谢这里的最佳答案。
@dodgy_coder 实际上......看看我的另一个答案的前两行:stackoverflow.com/a/37905102/6309 ;)这可能会更简单:根本没有 GOPATH! stackoverflow.com/a/48914523/6309 中有更多详细信息。
是的,我同意,如果您使用默认值,则不需要 GOPATH,对吗?由于 Google App Engine(Go Standard)开发环境需要它,因此我无论如何都需要设置它。他们实际上告诉您设置 GOPATH,但不告诉您将其设置为什么值..!
@dodgy_coder 是的,默认情况下,Go 将在固定的预定值中查找项目 PATH。
a
arganzheng

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


b
bcmills

您通常不应显式设置 GOROOTgo 命令根据自己的目录位置自动识别适当的 GOROOT

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

GOPATH 包含:

使用 go install 安装的二进制文件,位于 $GOPATH/bin。¹此位置可以使用 GOBIN 环境变量覆盖。

可以使用 GOBIN 环境变量覆盖此位置。

下载的模块源代码和校验和的缓存,位于 $GOPATH/pkg/mod。可以使用 GOMODCACHE 环境变量覆盖此位置。

可以使用 GOMODCACHE 环境变量覆盖此位置。

如果您同时设置了 GOBINGOMODCACHE,但不设置 GO111MODULE=off,那么 GOPATH 本身应该没有任何作用。

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

用于构建包的源代码,存储在以 $GOPATH/src 为根的目录树中。

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

安装非二进制包不再特别有用:go 命令有一个构建工件的缓存,从 Go 1.12 开始,即使在 GOPATH 模式下也需要它。

构建缓存不在 GOPATH 中。它的位置可以通过 GOCACHE 环境变量来设置。

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


i
informatik01

GOPATHGOROOT 配置已弃用。

您可以改用 GO 模块。

例如:

mkdir go_app
cd go_app
go mod init go_app

在大多数情况下,将模块命名为 go_app 是可以的,但更正确的是提供项目的完整路径。例如 github.com/username/projectname
我认为您的意思是已弃用。
V
VonC

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

请参阅CL Go Review 53370

go 工具现在将使用调用它的路径来尝试定位 Go 安装树的根。这意味着,如果将整个 Go 安装移动到新位置,go 工具应该会继续照常工作。这可以通过在环境中设置 GOROOT 来覆盖,这应该只在异常情况下进行。注意这不影响runtime.GOROOT()函数的结果,会继续报原安装位置;这可能会在以后的版本中修复。


T
Timothée HENRY

正如刚才提到的:

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

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

set GOPATH=D:\my_folder_for_go_code\

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

cd %GOPATH%

E
Eli Bendersky

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

使用 Go 模块Having installed 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 原始问题,您现在可以通过以下方式获取 doozer 依赖项:

$ go get github.com/ha/doozer

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

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


t
truthadjustr

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

您必须注意的是 PATH 环境变量,因为该变量是可以更改您的 go version 的变量。不是GOROOT!忘记GOROOT

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

因此,这是您需要定义 GOPATH 以隔离新 go version 的下载包的位置。

总之,忘记 GOROOT。更多地考虑 GOPATH


n
nomad

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

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

如果您将 .gopath 更改为 .gogo 会抱怨。

我希望他们能像 rust/cargo 人那样做,把所有东西都放在一个地方。


S
Samir Kape

运行 go help environment,它包含 go env 命令可以列出的每个环境变量的文档


C
Community

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

此外,在尝试使用 vgo 时出现以下错误:

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

删除 GOROOT、更新我的 GOPATH 和 export GO111MODULE="on" 解决了这个问题。

GOPATH 见 here

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


赞成正确声明不需要显式设置 GOROOT 环境变量。
F
Farshid

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

setx GOPATH C:\mynewgopath

S
Shammi Shailaj

我不得不附加

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

在 Mac OS X 上我的 ~/.bash_profile


J
Jino Jossy

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

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


A
Amit Kaneria

一旦安装了 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

t
thecow milk

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


s
snowcamel

您可以使用一个命令:go env GOPATH


E
Edwin O.

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

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

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

m
msanford

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

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

(这是针对 Fedora 20 的)


D
Diego Santa Cruz Mendezú

值应该是(MACOS):

GOROOT="/usr/local/go" --> all binaries file core go
GOPATH="/Applications/proyectos/go" --> the route to workspace (custom workspace)