我正在尝试像这样安装 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: 找不到包本地
GOPATH
。请参阅my answer below
GOROOT
。请参阅my answer below。
goinstall
确实是 Go1 之前的古老版本,自 2012 年以来就不存在了。
GOPATH
讨论 in the cmd/go
documentation:
GOPATH 环境变量列出了查找 Go 代码的位置。在 Unix 上,该值是一个冒号分隔的字符串。在 Windows 上,该值是以分号分隔的字符串。在计划 9 中,值是一个列表。 GOPATH 必须设置为在标准 Go 树之外获取、构建和安装包。
GOROOT
在 the 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 的更新版本。)
这是我的简单设置:
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”下载)。
首先运行 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 中对我不起作用。如何找到应该在哪里运行此命令
where go
它将显示执行文件的路径
export GOPATH=~/GO_PROJECTS
完成了工作
which go
返回 /usr/bin/go
,它是二进制文件,而不是目录。不知道该怎么办。
GOPATH
讨论 here:
GOPATH 环境变量 GOPATH 可以设置为以冒号分隔的路径列表,在其中可以找到 Go 代码、包对象和可执行文件。设置 GOPATH 以使用 goinstall 在 Go 树之外构建和安装您自己的代码和外部库(并避免编写 Makefile)。
并且讨论了 GOROOT
here:
$GOROOT Go 树的根,通常是 $HOME/go。这默认为运行 all.bash 的目录的父级。如果您选择不设置 $GOROOT,则在使用常规 makefile 开发 Go 程序时,您必须运行 gomake 而不是 make 或 gmake。
sudo apt-get install golang
时,Go 会安装在哪里?
go env
,您应该会看到该信息,对我来说是 /usr/lib/go/
我阅读了 go help gopath
文档,但仍然非常困惑,但从另一个 go doc 页面找到了这个小块:
GOPATH 环境变量指定工作区的位置。它可能是您在开发 Go 代码时需要设置的唯一环境变量。
http://golang.org/doc/code.html#GOPATH
从 go 1.8(2017 年第二季度)开始,GOPATH 将为您默认设置为 $HOME/go
请参阅 issue 17262 和 Rob Pike 的评论:
$HOME/go 会的。没有单一的最佳答案,但这简短而甜蜜,如果 $HOME/go 已经存在,选择该名称只会是个问题,这只会让已经安装 go 并了解 GOPATH 的专家感到高兴。
GOPATH 应该不指向 Go 安装,而是指向您的工作区(请参阅 https://golang.org/doc/code.html#GOPATH)。每当您使用 go get 或 go install 安装某些软件包时,它都会落在 GOPATH 中。这就是为什么它警告您,您绝对不希望将来自互联网的随机包转储到您的官方安装中。
您通常不应显式设置 GOROOT
。 go
命令根据自己的目录位置自动识别适当的 GOROOT
。
GOPATH
默认为 $HOME/go
。如果你想把它放在其他地方,你只需要明确地设置它。
GOPATH
包含:
使用 go install 安装的二进制文件,位于 $GOPATH/bin。¹此位置可以使用 GOBIN 环境变量覆盖。
可以使用 GOBIN 环境变量覆盖此位置。
下载的模块源代码和校验和的缓存,位于 $GOPATH/pkg/mod。可以使用 GOMODCACHE 环境变量覆盖此位置。
可以使用 GOMODCACHE 环境变量覆盖此位置。
如果您同时设置了 GOBIN
和 GOMODCACHE
,但不设置 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。
GOPATH
和 GOROOT
配置已弃用。
您可以改用 GO 模块。
例如:
mkdir go_app
cd go_app
go mod init go_app
go_app
是可以的,但更正确的是提供项目的完整路径。例如 github.com/username/projectname
。
具体到 GOROOT
,Go 1.9 会自动将其设置为其安装路径。
即使您安装了多个 Go,调用 1.9.x 的一个也会将 GOROOT
设置为 /path/to/go/1.9
(之前,如果未设置,它假定一个默认路径,如 /usr/local/go
或 c:\Go
)。
go 工具现在将使用调用它的路径来尝试定位 Go 安装树的根。这意味着,如果将整个 Go 安装移动到新位置,go 工具应该会继续照常工作。这可以通过在环境中设置 GOROOT 来覆盖,这应该只在异常情况下进行。注意这不影响runtime.GOROOT()函数的结果,会继续报原安装位置;这可能会在以后的版本中修复。
正如刚才提到的:
GOPATH 环境变量指定工作区的位置。
对于 Windows,这对我有用(在 Ms-dos 窗口中):
set GOPATH=D:\my_folder_for_go_code\
这将创建一个 GOPATH 变量,Ms-dos 在使用时可以识别,如下所示:
cd %GOPATH%
在现代 Go 中,您不需要设置 GOPATH
或 GOROOT
。事实上,除非您正在做一些非常专业的事情,否则最好在您的系统上取消设置它们。
使用 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/ 上提供了其他交互式教程
很多答案,但没有实质内容,比如机器人在他们系统上的内容上进行剪切和粘贴。无需将 GOROOT
设置为环境变量。但是,有一个有益需要设置 GOPATH
环境变量,如果不设置则默认为 ${HOME}/go/
文件夹。
您必须注意的是 PATH
环境变量,因为该变量是可以更改您的 go version
的变量。不是GOROOT
!忘记GOROOT
。
现在,如果您切换或更改为新的 go version
,您下载的包将使用默认的 $HOME/go
文件夹,它会与您之前的 go version
混淆。情况不妙。
因此,这是您需要定义 GOPATH
以隔离新 go version
的下载包的位置。
总之,忘记 GOROOT
。更多地考虑 GOPATH
。
这是一种解决方案(单个用户):
GOROOT=$HOME/.local # your go executable is in $GOROOT/bin
GOPATH=$HOME/.gopath
PATH=$GOROOT/bin:$GOPATH/bin:$PATH
如果您将 .gopath
更改为 .go
,go
会抱怨。
我希望他们能像 rust/cargo
人那样做,把所有东西都放在一个地方。
运行 go help environment
,它包含 go env
命令可以列出的每个环境变量的文档
您不需要显式设置 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
环境变量。
截至 2020 年和 Go 版本 1.13+,在 Windows 中更新 GOPATH 的最佳方法是在命令提示符下键入:
setx GOPATH C:\mynewgopath
我不得不附加
export GOROOT=/usr/local/Cellar/go/1.10.1/libexec
在 Mac OS X 上我的 ~/.bash_profile
还有一种情况,当我们使用 go 时,它会编译所有的 go 文件。
因此,假设我们有一个文件 main.go,后来我们将当前文件更改为 main_old.go,然后添加了新的 main.go 文件。然后,当我们构建我们的应用程序时,所有的 go 文件都将被编译。所以发生的错误可能是由于其他一些 go 文件中的编译错误。
一旦安装了 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
对于所有新手,如果您使用的是 Ubuntu,他们可以做一个简单的 export GOPATH=$HOME/go
或做 go help gopath
了解更多信息。
您可以使用一个命令:go env GOPATH
在 osx 中,我安装了 brew,这是适合我的设置
GOPATH="$HOME/my_go_work_space" //make sure you have this folder created
GOROOT="/usr/local/Cellar/go/1.10/libexec"
如果您使用的是发行版 go,则应指出包含文件的位置,例如:
$ rpm -ql golang | grep include
/usr/lib/golang/include
(这是针对 Fedora 20 的)
值应该是(MACOS):
GOROOT="/usr/local/go" --> all binaries file core go
GOPATH="/Applications/proyectos/go" --> the route to workspace (custom workspace)
go
命令所需的信息,这对于使用 Go 至关重要。例如,在 OP 中使用的goinstall
现在应该是go get
。/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。