在fedora 22上,我发现所有标准的go库在go的路径上都不可见。
注意我确实已经清理了golang系统 - 所以我非常确定它不是一个混合包版本控制问题,升级时经常会发生这种问题。
注意我安装的版本是1.4.2
我一直在设置GOROOT = / usr / lib / golang,GOPATH =(任何东西)。
我应该调查/ usr / lib / golang中的哪些内部目录来解决丢失的库?
我遇到的失败的一个简单例子如下......
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"
和相应的go env:
a1.sources = r1
a1.sources.r1.hnadler = org.apache.flume.source.http.JSONHandler
更新
根据这个帖子中的评论...看起来我在/ usr / lib / golang / src下没有任何东西。这基本上意味着我的Go发行版已被破坏吗?如果是这样的话,在这种情况下,Go二进制文件可能会快速失败......?
答案 0 :(得分:-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库使用标准库,如io
或bytes
等。因此,一个很好的测试,你的go分发正确安装,并且你的GOPATH也设置 - 是运行go get
。例如,go get github.com/golang/example/hello
足以暴露GOROOT标准库的缺陷。
要做的第一件事就是检查你的装置中开箱即用的GOROOT。它可以通过运行go env
来获得,它将为您提供所有环境变量。
一般来说, GOROOT 下面应该有一个src/
目录。但是,如果你有一个破坏的go包,那么这些库中的一些可能不是(出于某种原因)在GOROOT / src下。也就是说,你应该在那里查看核心内容的源目录,例如,从健康的工作安装。
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/
现在,回顾我的破坏安装,它看起来与上面的内容非常不同......看起来我在/ usr / lib / golang下没有 ANYTHING / src 。这基本上意味着我的go包缺少一些非常重要的组件,因此几乎所有go get ...
操作都会失败,因为没有任何go标准库在GOROOT路径中。
如上所述 - 最终解决方案只是yum erase golang-src
,rm -rf /usr/lib/golang/
,然后是yum install golang-src golang
。