我正在尝试像这样安装doozer
$ goinstall github.com/ha/doozer
Run Code Online (Sandbox Code Playgroud)
我收到这些错误.
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
Run Code Online (Sandbox Code Playgroud)
pje*_*pje 284
GOPATH
在cmd/go
文档中讨论:
在
GOPATH
环境变量列表地方寻找Go代码.在Unix上,该值是以冒号分隔的字符串.在Windows上,该值是以分号分隔的字符串.在计划9中,值是一个列表.
GOPATH
必须设置为在标准Go树之外获取,构建和安装包.
GOROOT
在安装说明中讨论:
Go二进制发行版假设它们将安装在
/usr/local/go
(或c:\Go
在Windows下),但可以将Go工具安装到其他位置.在这种情况下,您必须将GOROOT
环境变量设置 为指向安装它的目录.例如,如果您安装了Go到您的主目录,则应将以下命令添加到
$HOME/.profile
:Run Code Online (Sandbox Code Playgroud)export GOROOT=$HOME/go export PATH=$PATH:$GOROOT/bin
注意:
GOROOT
必须仅在安装到自定义位置时设置.
(Chris Bunch的答案的更新版本.)
Evg*_*M86 92
这是一个简单的设置:
directory for go related things: ~/programming/go
directory for go compiler/tools: ~/programming/go/go-1.4
directory for go software : ~/programming/go/packages
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
简而言之:
GOROOT适用于来自安装的编译器/工具.
GOPATH适用于您自己的项目/第三方库(使用"go get"下载).
РАВ*_*АВИ 44
第一次运行go env
.
如果你看到没有安装,你可以通过自制软件或通过包和/或其他方式安装它.
如果您看到输出,则安装go.
它显示了所有已设置但未设置的环境.
如果你看到空的homebrew
:
Go
(在我的电脑:GOROOT
)which go
如果你看到空的/usr/local/go/bin/go
:
export GOROOT=/usr/local/go
GOPATH
Chr*_*nch 39
GOPATH
在这里讨论:
该
GOPATH
环境变量
GOPATH
可以设置为以冒号分隔的路径列表,其中可以找到Go代码,包对象和可执行文件.设置a
GOPATH
使用goinstall在Go树之外构建和安装自己的代码和外部库(并避免编写Makefile).
并GOROOT
讨论在这里:
$GOROOT
经常是Go树的根$HOME/go
.默认all.bash
为运行目录的父级.如果您选择不设置$GOROOT
,则在使用传统的makefile开发Go程序时,必须运行gomake而不是make或gmake.
Max*_*Max 18
我阅读了go help gopath
文档并且仍然令人难以置信地困惑,但是从另一个go doc页面找到了这个小块:
GOPATH环境变量指定工作区的位置.它可能是开发Go代码时需要设置的唯一环境变量.
http://golang.org/doc/code.html#GOPATH
bcm*_*lls 15
您通常不应GOROOT
显式设置。该命令根据其自己的目录位置自动go
识别适当的目录。GOROOT
GOPATH
默认为$HOME/go
. 如果你想把它放在其他地方,你只需要明确地设置它。
GOPATH
包含:
go install
,位于$GOPATH/bin
.\xc2\xb9\nGOBIN
。$GOPATH/pkg/mod
。\nGOMODCACHE
。如果同时设置GOBIN
和GOMODCACHE
,并且不设置GO111MODULE=off
,那么GOPATH
它本身应该基本上没有效果。
另外,在遗留GOPATH
模式下(GO111MODULE=off
也设置时),GOPATH
包含:
$GOPATH/src
.go install
,位于$GOPATH/pkg
。\ngo
命令具有内置工件的缓存,从 Go 1.12 开始,即使在GOPATH
模式下也需要它。GOPATH
. 它的位置可以通过环境变量来设置GOCACHE
。\xc2\xb9 二进制文件也可以在 Go 1.17 及更早版本上安装go get
,但从go install
Go 1.16 开始首选;请参阅https://golang.org/doc/go1.16。
arg*_*eng 11
该GOPATH应该不指向转到安装,而是你的工作空间(见https://golang.org/doc/code.html#GOPATH).每当你使用go get或go install安装一些软件包时,它都将落在GOPATH中.这就是为什么它会警告你,你绝对不希望将来自互联网的随机软件包转储到你的官方安装中.
具体来说GOROOT
,Go 1.9 会自动将其设置为安装路径。
即使你安装了多个 Go,调用 1.9.x 的一个也会设置GOROOT
为/path/to/go/1.9
(之前,如果没有设置,它会假设一个默认路径,如/usr/local/go
或c:\Go
)。
请参阅CL Go 评论 53370:
现在将
go tool
使用调用它的路径来尝试定位 Go 安装树的根。
这意味着如果整个 Go 安装移动到新位置,它们go tool
应该继续照常工作。这可以通过
GOROOT
环境设置来覆盖,这只能在异常情况下进行。
请注意,这不会影响该runtime.GOROOT()
函数的结果,该函数将继续报告原始安装位置;这可能会在以后的版本中得到修复。
在现代 Go 中,您不需要设置GOPATH
or GOROOT
。事实上,除非您正在做一些非常专业的事情,否则最好在您的系统上取消设置它们。
使用 Go 模块。安装 Go 后,选择您想要工作的目录。然后:
$ mkdir example
$ cd example
$ go mod init example.com
Run Code Online (Sandbox Code Playgroud)
请注意,模块名称example.com
是任意的;如果您将工作保存在 GitHub 上,这可能类似于github.com/your-username/project-name
.
最后一条命令将创建一个go.mod
文件;现在你可以通过以下方式获取依赖项go get
:
$ go get rsc.io/quote
Run Code Online (Sandbox Code Playgroud)
现在您的代码使用此依赖项:
$ touch main.go
Run Code Online (Sandbox Code Playgroud)
将其放入main.go
:
package main
import (
"fmt"
"rsc.io/quote"
)
func main() {
fmt.Println(quote.Go())
}
Run Code Online (Sandbox Code Playgroud)
并运行:
$ go run .
Run Code Online (Sandbox Code Playgroud)
关于原始问题,您现在可以doozer
通过以下方式获取依赖项:
$ go get github.com/ha/doozer
Run Code Online (Sandbox Code Playgroud)
doozer
现在您可以在代码中使用该模块。等等。您还可以检查go.mod
目录中的文件以查看列出的依赖项及其版本。每个模块都是独立的,具有自己的依赖版本。您可以拥有两个并排的模块,每个模块都有自己的go.mod
文件指向某些依赖项的不同版本 - 由于模块之间的隔离,这一切都会正常工作。
有关更多信息,请从此处的官方教程开始。在几个章节中,它将引导您完成上面所示的步骤,以及编写您自己的可重用模块和包,以及从其他模块导入它们。其他交互式教程可在https://play-with-go.dev/获取
小智 8
GOPATH
并且GOROOT
配置已被弃用。
您可以改用 GO 模块。
例如:
mkdir go_app
cd go_app
go mod init go_app
Run Code Online (Sandbox Code Playgroud)
正如刚才提到的:
GOPATH环境变量指定工作区的位置.
对于Windows,这适用于我(在Ms-dos窗口中):
set GOPATH=D:\my_folder_for_go_code\
Run Code Online (Sandbox Code Playgroud)
这将创建一个GOPATH变量,Ms-dos在使用时可以识别如下:
cd %GOPATH%
Run Code Online (Sandbox Code Playgroud)
有很多答案,但没有实质内容,就像机器人在系统上剪切和粘贴内容一样。无需设置GOROOT
为环境变量。但是,需要设置环境GOPATH
变量,如果不设置,则默认为${HOME}/go/
文件夹。
你必须注意的是PATH
环境变量,因为这个变量是可以改变你的go version
. 不是GOROOT
!忘记GOROOT
。
现在,如果您切换或更改为新的go version
,您下载的软件包将使用默认$HOME/go
文件夹,并且它将与您以前的文件夹混合在一起go version
。不是很好。
因此,您需要在此处GOPATH
进行定义,以便隔离下载的新go version
.
总而言之,忘记了GOROOT
。多思考一下GOPATH
。