gpt4 book ai didi

go - 我在获取 golang.org/x/tools/cmd/goimports 时遇到问题

转载 作者:IT王子 更新时间:2023-10-29 01:16:42 27 4
gpt4 key购买 nike

当我得到golang.org/x/tools/cmd/goimports时

go get golang.org/x/tools/cmd/goimports

...我收到以下错误:
package golang.org/x/tools/cmd/goimports: unrecognized import path "golang.org/x/tools/cmd/goimports"

我试图从源代码编译 goimports,所以我从

http://github.com/golang/tools.git

https://github.com/bradfitz/goimports

以及如何编译它?

最佳答案

这个答案将提供一个选项来解决由于网络阻塞 而失败的 go get
请注意,如果您的 Go 安装存在配置问题(例如不正确的 GOPATH ),则此类故障应解决 而不是 ,但应解决潜在问题;否则你只会有以后的错误/失败。但是,在这种特定情况下,显然失败的根本原因是无法修复的,因为无法通过网络访问所需的资源。 (尽管在这种情况下,我希望 go get 有更好、更具体的错误消息;也许不是仅仅阻止 HTTP 请求,而是替换为包含一些混淆 go get 的数据的页面)。

首先,go get golang.org/x/tools/cmd/goimports 试图做什么。 The documentation 说它“下载并安装由导入路径命名的包及其依赖项。”

意识到两件事很重要:第一,它通过获取包源(通常通过克隆 VCS 存储库)然后构建包/程序来实现这一点;第二,如果源目录似乎已经存在,它不会获取或更新任何内容。
如果先前的go get无法检测到某些错误,则后者可能会引起问题,因为您将被“腐败”的源头所困扰。如果发生这种情况,您可以使用 -u 标志尝试更新,或者您可以从 GOPATH 中删除 old/corrupt/incomplete 目录并尝试新的 go get

该文档还描述了它如何解释 "remote import paths" ,基本上是尝试将其与已知代码托管服务(GitHub、Bitbucket 等)或远程版本控制系统存储库(git、mercurial 等)或执行 HTTPS/HTTP 请求相匹配,并且寻找 meta name="go-import" … 标签。

您可以使用 go get -v 来查看其中的一些内容:

# go get -v golang.org/x/tools/cmd/goimports
Fetching https://golang.org/x/tools/cmd/goimports?go-get=1
Parsing meta tags from https://golang.org/x/tools/cmd/goimports?go-get=1 (status code 200)
get "golang.org/x/tools/cmd/goimports": found meta tag main.metaImport{Prefix:"golang.org/x/tools", VCS:"git", RepoRoot:"https://go.googlesource.com/tools"} at https://golang.org/x/tools/cmd/goimports?go-get=1
get "golang.org/x/tools/cmd/goimports": verifying non-authoritative meta tag
Fetching https://golang.org/x/tools?go-get=1
Parsing meta tags from https://golang.org/x/tools?go-get=1 (status code 200)
golang.org/x/tools (download)
golang.org/x/tools/go/ast/astutil
golang.org/x/tools/imports
golang.org/x/tools/cmd/goimports

在这种情况下,go getgolang.org 发出 HTTPS 请求以发现源的位置并有效地执行¹:
mkdir -p $GOPATH/src/golang.org/x/tools
git clone https://go.googlesource.com/tools $GOPATH/src/golang.org/x/tools
go build golang.org/x/tools/cmd/goimports

它发现 golang.org/x/tools/cmd/goimportsgolang.org/x/tools 的一部分,并通过执行 git clone 下载整个存储库,然后构建 goimports 命令,它是两个依赖包(方便地位于同一个存储库中,否则会有多个克隆/下载步骤)。结果放在 $GOPATH/bin (和 $GOPATH/pkg/$GOOS_$GOARCH )下。

因此,如果 go get 不起作用或被阻止访问 golang.org,首先要尝试的是上述命令。
如果不能替换镜像(例如 git clone https://github.com/golang/tools.git $GOPATH/golang.org/x/tools ),或者您可以从某处下载存储库的内容并将它们解压缩到 GOPATH 中的正确位置,例如也许是这样的:
curl https://github.com/golang/tools/archive/master.zip
unzip -d $GOPATH/src/golang.org/x/tools master.zip

一旦所有依赖包的源“以某种方式”放入 GOPATH/src ,您应该能够 go build {path}
这里的重要部分是确保源位于 go 工具期望它们是 的位置,即在 $GOPATH/src/{go/import/path} 下。

如果只有某些域(例如 golang.org )被阻止,您可以仅对被阻止的存储库执行此操作,然后执行 go get golang.org/x/tools/cmd/goimports ;由于 go get 不会尝试获取现有目录,因此只应在构建所有内容之前获取任何丢失的依赖项。

¹ 请注意,这些示例假设 GOPATH 是单个目录的常见情况。如果您的 GOPATH 是多个目录,例如GOPATH=$HOME/go.public:$HOME/go.private ,那么您需要替换 GOPATH 的第一个路径组件。

关于go - 我在获取 golang.org/x/tools/cmd/goimports 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31867347/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com