我在获取golang.org/x/tools/cmd/goimports时遇到问题
当我得到golang.org/x/tools/cmd/goimports我在获取golang.org/x/tools/cmd/goimports时遇到问题,go,Go,当我得到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,所以我从 和 以及如何编译它?这个答案将提供一个选项来解决由于网络阻塞而导致
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,所以我从
和
以及如何编译它?这个答案将提供一个选项来解决由于网络阻塞而导致的失败的
go get
。
请注意,如果您的Go安装存在配置问题(例如不正确的GOPATH
),则应解决此类故障,而不是解决根本问题;否则,您只会在以后出现错误/失败。但是,在这种特定情况下,由于没有对所需资源的网络访问,故障的根本原因显然是不可修复的。(尽管在这种情况下,我希望从go-get
得到更好、更具体的错误消息;也许不再只是阻止HTTP请求,而是用一个包含一些混淆go-get
的数据的页面代替了它)
首先,什么是
go-get-golang.org/x/tools/cmd/goimports
。表示“下载并安装由导入路径命名的包及其依赖项。”
实现两件事很重要:一,它通过获取包源(通常通过克隆VCS存储库)然后构建包/程序来实现这一点;第二,如果源目录似乎已经存在,它不会获取或更新任何内容。
如果以前的go-get
出现未被检测到的问题,则后者可能会导致问题,因为您将被“损坏”的源卡住。如果发生这种情况,您可以使用-u
标志尝试更新,也可以从GOPATH
中删除旧的/损坏的/不完整的目录,然后尝试新的go get
文档还描述了它的解释方式,主要是尝试将其与已知代码托管服务(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克隆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
的第一个路径组件,尝试以下三种方法:
http\u proxy
和https\u proxy
添加到环境变量中go-get-golang.org/x/tools/cmd/goimports
适合我。你有什么版本的围棋?你的围棋环境是什么样的?(go-version
和go-env
输出).go-get-v-u golang.org/x/tools/cmd/goimports怎么说?如果你想手动获取源代码,你应该使用git/hg命令获取存储库,并确保它在GOPATH
下的正确位置(例如$GOPATH/src/golang.org/x/tools
下)。至于如何构建,请参见;但您确实应该解决您的go get
问题。您使用的是Linux,对吗?哪个发行版?如果您使用的是Ubuntu或任何其他Debian变体,您可以尝试以下方法:如果您使用,请确保将/usr/local/go
和/usr/bin/go
添加到sudo rm-rf
命令中。如果没有帮不上忙,我猜你的$GOROOT设置不正确。echo$GOROOT
说了什么?如果没有说什么,请检查/usr/local/go
是否存在。@Dave C很抱歉回复太晚。我无法解决“go-get”问题,因为golang.org/x/tools被政府阻止。我试图运行“go-build”在每个文件夹golang/tools/下,然后在goimport/下运行“go build”,它起作用了。我得到了goimport文件。我不知道为什么。可能goimport依赖于一些需要在前面构建的数据包。我不清楚golang.org/x/tools是如何组织的。如果我想构建所有的
[http]
proxy = "your proxy"