背景
“保证已安装……”仅意味着它取决于实际提供Go开发人员的一组软件包。ENV。
正如你可以看到,这个软件包依赖于其他三个包- ,,golang-1.8-doc
-所以,当你安装,这三个将被安装为好。golang-1.8-gogolang-1.8-srcgolang-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版本。gogolang-1.8-go
我对这种方法的“为什么”的看法是go在任何给定的Debian 版本中都有一个众所周知的版本。据说这是构建用Go语言编写的Debian软件包所必需的。否则,包装制造机械需要发明一些技巧来查找默认的Go版本。截至目前,他们的源程序包可能只依赖于golang-go某天而已。