我无法获得golang.org/x/tools/cmd/goimports

时间:2015-08-06 23:21:53

标签: go

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

Let us (start|begin).
(Start|begin) the (program|software)
I'm ready to (start|begin)
etc...

...我收到以下错误:

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

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

下载

http://github.com/golang/tools.githttps://github.com/bradfitz/goimports

以及如何编译它?

2 个答案:

答案 0 :(得分:12)

此答案将提供解决由于网络阻止而失败的go get 的选项。 请注意,如果您的Go安装存在配置问题(例如错误的GOPATH),则此类失败应该解决,但问题已解决;否则你只会遇到以后的错误/失败。但是,在这种特定情况下,由于没有网络访问所需的资源,显然失败的根本原因是不可修复的。 (虽然在这种情况下我期望来自go get的更好,更具体的错误消息;或许只是阻止HTTP请求已被替换为包含一些混淆go get的数据的页面

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

重要的是要实现两件事:一,通过获取包 sources (通常通过克隆VCS存储库)然后构建包/程序来实现这一点;两个,如果源目录似乎已经存在,它不会获取或更新任何内容。 如果未检测到某些内容与之前的go get出错,则后者可能会导致问题,因为您将遇到“损坏”的来源。如果发生这种情况,您可以使用-u标记尝试更新,也可以从GOPATH删除旧的/损坏/不完整的目录,然后尝试新的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,那么您需要替换foo()第一个路径组件。

答案 1 :(得分:0)

尝试以下三种方法:

  1. 在Windows上,在Internet Explorer中设置代理。
  2. http_proxyhttps_proxy添加到您的环境变量中。
  3. 如果您使用的是git,请编辑.gitconfig文件,如下所示:
  4. [http]
       proxy = "your proxy"