Antecedentes
«garantias… estão instaladas» significa apenas que depende de um conjunto de pacotes que realmente fornecem o Go dev. env.
Como você pode ver ,
este pacote depende de outros três pacotes— golang-1.8-doc
,
golang-1.8-go
, golang-1.8-src
- portanto, quando você instala golang-1.8
,
esses três também serão instalados.
O problema que você está enfrentando é, devo admitir, confuso mas pode ser facilmente explicado.
Se você olhar para a lista de pacotes instalados por golang-1.8-go
, você verá que a ferramenta go
está instalada como /usr/lib/go-1.8/bin/go
,
e o diretório /usr/lib/go-1.8/bin
não está listado no
variável de ambiente PATH
padrão (definida por /etc/profile
).
O motivo pelo qual é feito dessa maneira é duplo:
-
Pode haver vários grupos de
golang-X.Y*
pacotes no mesmo Pacote Debian ao mesmo tempo; digamos, o Stretch tem 1,7 e 1,8.É crucial entender que eles são co-instaláveis, o que pode ser útil para testar como um projeto que foi testado contra
X.Y
funcionará comX.Y+N
. -
Debian oferece um pacote especial "o mais genérico" que depende de um pacote
golang-X.Y
específico que foi considerado para ser "o padrão" para o lançamento do Debian espacial.No Stretch, é
golang-go
, e como você pode ver, tem "1.7" em sua versão e dependegolang-1.7-go
.Este pacote garante que os binários executáveis fornecido por um pacote
golang-X.Y-go
padrão está disponível em "o lugar padrão" - em/usr/bin
( veja você mesmo ).
O que fazer sobre isso?
Várias possiblilties:
-
Simplesmente chame
/usr/lib/go-1.8/bin/go
pelo nome completo do caminho.A ferramenta
go
"sabe" onde seuGOROOT
é para que ele encontre seu pacotes específicos para a sua versão muito bem. -
Prefira esse diretório à sua variável de caminho; digamos colocar algo como
export PATH="/usr/lib/go-1.8/bin:$PATH"
no seu script
~/.bashrc
e a próxima chamada parago
irá encontrá-lo no novo local. -
Agarre a fonte do pacote
golang-go
, corrija-o para que tornagolang-1.8-go
o pacote padrão, construa e instale.(Eu não recomendaria seguir esse caminho ainda)
Espero que isso ajude.
Outra tentativa de explicar
O Stretch tem dois pacotes de três pacotes: golang-1.7-*
e golang-1.8-*
.
Em cada pacote, o pacote golang-1.N-go
instala seu binário go
sob /usr/lib/go-1.N/bin
. Nenhum deles instala um symlink em /usr/bin
.
A razão para isso é tornar esses pacotes de pacotes co-instaláveis, para que você possa compilar seu código Go com qualquer uma das versões instaladas.
Agora existe outro, independente, pacote, que não codifica a versão de lançamento do Go em seu nome.
Tem o nome golang-go
e depende apenas de golang-1.7-go
em que 1.7
é a versão padrão do tempo de execução do Go para o Stretch.
Em outro lançamento, golang-go
dependerá de outro golang-X.Y-go
pacote.
É este pacote, que fornece /usr/bin/go
apontando para
/usr/lib/go-1.7/bin/go
.
Então, se (e somente se) você tiver golang-go
instalado, você terá
o binário go
disponível em /usr/bin
, e isso será de Go
1.7 no alongamento.
E não, não é possível de alguma forma forçar golang-go
a apontar para
go
do pacote golang-1.8-go
instalado, e também não existe
uma maneira de selecionar uma versão preferida do Go via "dpkg alternatives"
mecanismo.
Minha opinião sobre "o porquê" dessa abordagem é ter uma versão bem conhecida
de go
em qualquer versão do Debian. Isso é supostamente necessário para
construindo pacotes Debian de software escritos em Go.
Caso contrário, seria necessário que as máquinas de construção de pacotes inventassem
algum truque para encontrar a versão padrão do Go;
a partir de agora, seus pacotes de fontes podem
apenas dependa de golang-go
e chame isso por dia.