当我得到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.git 和 https://github.com/bradfitz/goimports
以及如何编译它?
答案 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 get
向golang.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/goimports
是golang.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)
尝试以下三种方法:
http_proxy
和https_proxy
添加到您的环境变量中。[http] proxy = "your proxy"