【问题标题】:Go "unrecognized imports"转到“无法识别的进口”
【发布时间】:2015-06-15 21:14:16
【问题描述】:

在 fedora 22 上,我发现所有标准的 go 库在 go 的路径上都不可见。

注意我确实清理了我的 golang 系统 - 所以我很确定这不是升级 go 时经常发生的混合包版本控制问题。

注意我安装的go版本是1.4.2

我一直在设置 GOROOT=/usr/lib/golang 和 GOPATH=(anything)。

我应该查看 /usr/lib/golang 中的哪些内部目录来解决缺少的库的问题?

下面是我遇到的失败的一个简单示例...

[jay@rhbd gopath]$ go get github.com/golang/example/hello package github.com/golang/example/hello imports fmt: unrecognized import path "fmt" package github.com/golang/example/hello imports runtime: unrecognized import path "runtime"

以及对应的go env:

GOHOSTOS="linux" GOOS="linux" GOPATH="/home/jay/gopath/" GORACE="" GOROOT="/usr/lib/golang" GOTOOLDIR="/usr/lib/golang/pkg/tool/linux_amd64" CC="gcc" GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0" CXX="g++" CGO_ENABLED="1"

更新

根据该线程中的 cmets... 看起来我在 /usr/lib/golang/src 下没有任何内容。这是否基本上意味着我的 Go 发行版被破坏了?如果是这样,在这种情况下,Go 二进制文件可能会很快失败......?

【问题讨论】:

  • 你是如何安装 Go 的?如果从源安装,不要设置GOROOT
  • 我在有和没有 GOROOT 的情况下都试过这个。我可以使用哪些技巧来真正检查问题?为什么 GOROOT 会破坏局势?
  • 我不知道要解决什么问题,因为我不知道您是如何来到这里的。如果您使用官方二进制安装,您所做的只是解压缩 tarball,并设置适当的变量。 您使用了哪些步骤来安装 Go?
  • yum 安装 golang(fedora 软件包)。但是,通常不应该有一种方法可以让您看到去哪里寻找包裹,以确认/否认它们的存在吗?通常在 Java 世界中,我们可能会使用 System.getProperties 来打印类路径中的所有 jar,然后一一查看包。我假设在 golang 中可能有类似的低级方法来手动查找在运行时提供给程序的包?
  • 你几乎从不使用GOROOT,因为它被嵌入到编译的go 工具中,并且设置为almost always a mistake。没有“低级”的方式来查找包——只有两个地方可以查看GOROOTGOPATH。 Go 标准库源代码应位于 $GOROOT/src

标签: go godeps


【解决方案1】:

TLDR

我的问题的最终解决方案如下(这可能有点矫枉过正)。

yum erase golang-src

rm -rf /usr/lib/golang/

yum install golang-src golang

安装 golang-src 后,你应该确认在 GOROOT/src/ 下确实有几个用于所有标准 go 库的包,即下面列出的那些。

如何调查 GOLANG 安装的详细信息

显然:go get 获取并安装您指定的源代码。大多数 Go 库都使用标准库,例如 iobytes 等。因此,一个很好的测试你的 go 发行版是否正确安装,并且你的 GOPATH 也已设置 - 运行go get。例如go get github.com/golang/example/hello 足以暴露 GOROOT 标准库的缺陷。

首先要做的是检查安装中的 GOROOT 是什么。它可以通过运行go env 获得,这将为您提供所有 go 环境变量。

一般GOROOT下面应该有一个src/目录。但是,如果你有一个损坏的 go 包,那么其中一些库可能(由于某种原因)不在 GOROOT/src 下。也就是说,您应该在那里看到核心 go 内容的源目录,例如,来自正常运行的 go 安装。

ls /usr/lib/golang/src/ all.bash builtin/ compress/ errors/ html/ libbio/ Make.dist os/ run.bash strings/ time/ all.bat bytes/ ...... net/ regexp/ strconv/ text/

现在,回顾一下我损坏的 go 安装,它看起来与上面的非常不同......看起来我在 /usr/lib/golang 下没有 ANYTHING /src 。这基本上意味着我的 go 包缺少一些非常重要的组件,几乎所有的go get ... 操作都会因此失败,因为 go 标准库都没有在 GOROOT 路径中。

如上所述——最终解决方案只是简单地发送到yum erase golang-srcrm -rf /usr/lib/golang/,然后是yum install golang-src golang

【讨论】:

  • 感谢您帮助我回答这个问题!我想我得去看看这个发行版的包装,看看为什么它不包括 go 标准库 src/ 目录。
猜你喜欢
  • 2020-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多