背景
“保证已安装……”仅意味着它取决于实际提供Go开发人员的一组软件包。ENV。
正如你可以看到,这个软件包依赖于其他三个包- ,,golang-1.8-doc
-所以,当你安装,这三个将被安装为好。golang-1.8-go
golang-1.8-src
golang-1.8
我必须承认,您遇到的问题确实令人困惑,但可以轻松解释。
如果查看由安装的软件包列表golang-1.8-go
,您会看到该go
工具安装为/usr/lib/go-1.8/bin/go
,并且/usr/lib/go-1.8/bin
默认PATH
环境变量(由设置/etc/profile
)中未列出目录。
这样做的原因有两个:
golang-X.Y*
同一时间在同一Debian套件中可以有几组软件包。例如,Stretch有1.7和1.8。
至关重要的是要了解它们是可共安装的,这对于测试要针对其进行测试的项目如何与X.Y
工作很有用X.Y+N
。
Debian提供了一个特殊的“最通用” Go软件包,该软件包取决于特定的golang-X.Y
软件包,该软件包被视为特定的Debian版本的“标准”。
golang-go
如您所见,在Stretch中,它的版本为“ 1.7”并取决于
golang-1.7-go
。
该程序包确保特定默认golang-X.Y-go
程序包提供的可执行二进制文件可在“标准位置”中找到/usr/bin
(请参阅)。
怎么办呢?
几种可能性:
仅/usr/lib/go-1.8/bin/go
通过其完整路径名进行调用。
该go
工具“知道”它的GOROOT
位置,因此可以找到特定于其版本的软件包。
在该目录前添加路径变量;说说像
export PATH="/usr/lib/go-1.8/bin:$PATH"
进入您的~/.bashrc
脚本,下一个调用go
将在新位置找到它。
抓住golang-go
软件包的源代码,对其进行修复,以使其成为golang-1.8-go
默认软件包,然后构建并安装。
(我不建议您现在就这样走。)
希望这可以帮助。
另一种解释
Stretch有两包,每包三包:golang-1.7-*
和golang-1.8-*
。
在每个软件包中,golang-1.N-go
软件包都将其go
二进制文件安装在下/usr/lib/go-1.N/bin
。他们都没有在下安装符号链接/usr/bin
。
这样做的原因是使这些程序包可同时安装,
以便您可以使用任何已安装的版本来编译Go代码。
现在有另一个独立的程序包,该程序包不使用名称对Go发行版进行编码。它名为golang-go
,并且仅取决于Stretch的Go运行时的默认版本在golang-1.7-go
哪里。1.7
在另一个版本中,golang-go
将依赖于另一个golang-X.Y-go
软件包。
正是这个包,它提供/usr/bin/go
在指向
/usr/lib/go-1.7/bin/go
。
因此,如果(且仅当)已golang-go
安装,您将go
在下获得可用的二进制文件/usr/bin
,并且该文件将为Stretch中的Go 1.7。
不,不可能以某种方式强制从已安装的软件包中golang-go
指向
,也没有办法通过“ dpkg替代品”机制选择首选的Go版本。go
golang-1.8-go
我对这种方法的“为什么”的看法是go
在任何给定的Debian 版本中都有一个众所周知的版本。据说这是构建用Go语言编写的Debian软件包所必需的。否则,包装制造机械需要发明一些技巧来查找默认的Go版本。截至目前,他们的源程序包可能只依赖于golang-go
某天而已。