我在获取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,所以我从 和 以及如何编译它?这个答案将提供一个选项来解决由于网络阻塞而导致

当我得到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
。 请注意,如果您的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
的第一个路径组件,尝试以下三种方法:

  • 在Windows上,在Internet Explorer中设置代理
  • http\u proxy
    https\u proxy
    添加到环境变量中
  • 如果您使用的是git,请按如下方式编辑.gitconfig文件:

  • 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"