Como definir corretamente variáveis de ambiente (golang on Manjaro)

1

Eu tenho um problema com a minha instalação. Estou usando o Manjaro e acho que isso está relacionado a isso, já que o Manjaro parece lidar com o env de maneira diferente e sugerido pelo Ubuntu e Windows.

Eu fui instalado e posso executar o código conforme o esperado:

$ go run gitlab.com/gitlabtest
Hello, GitLab!

Então eu verifico se há alguma variável de ambiente definida com:

$ echo $GOROOT

$ echo $GOPATH

$ echo $GOBIN

$

Portanto, há não como parece que é estranho. Por que eu poderia executar meu programa de teste? Eu tento verificar as variáveis de ambiente de outra forma:

$ go env GOROOT
/usr/lib/go
$ go env GOPATH
/home/bluebrown/go
$ go env GOBIN

$ 

Isso é interessante. Go em si parece ter algum conhecimento das variáveis de ambiente. É provavelmente por isso que posso executar o código de ir de qualquer lugar, segmentando efetivamente $GOPATH . Há apenas um problema, $GOBIN parece estar desativado.

OK, isso significa que eu tenho que editar meu ~ / .bash_profile, eu acho.

#
# ~/.bash_profile
#
[[ -f ~/.bashrc ]] && . ~/.bashrc

export GOROOT=/usr/lib/go
export GOPATH=$HOME/go
export GOBIN=$HOME/go/bin

Por fim, obtenho o resultado que quero da seguinte forma:

$ source .bash_profile
$ echo $GOROOT &&echo $GOPATH &&echo $GOBIN
/usr/lib/go
/home/bluebrown/go
/home/bluebrown/go/bin
$
$ go env GOROOT &&go env GOPATH &&go env GOBIN
/usr/lib/go
/home/bluebrown/go
/home/bluebrown/go/bin

Isso é ótimo agora, posso usar pacotes do $GOBIN como glide ou govendor , certo?

[~]$ go get -u -v github.com/kardianos/govendor
github.com/kardianos/govendor (download)
[~]$ cd $GOPATH/src
[src]$ mkdir testdir
[src]$ cd testdir
[testdir]$ govendor init
bash: govendor: command not found

Bem, talvez não. Então eu tento deslizar:

$ curl https://glide.sh/get | sh
$...
$which: no glide in  
$ (/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:  
   /usr/lib/jvm/default/bin:/usr/bin/site_perl:
   /usr/bin/vendor_perl:/usr/bin/core_perl:/usr/local/go/bin)

glide not found. Did you add $GOBIN to your $PATH?
Fail to install glide

Então, não importa qual pacote eu tenha em $GOBIN , ele não pode ser encontrado. Quando eu reiniciar o dispositivo, tudo é redefinido novamente por algum motivo: (

Neste ponto, não sei mais o que fazer.

    
por The Fool 28.11.2018 / 14:14

1 resposta

0

Em relação à possibilidade de executar binários do Golang que você instala com go get ou go install , você precisa adicionar o diretório "bin" do Golang ao seu $PATH para que funcione.

Note que você realmente precisa ter uma variável $GOBIN definida para que isso funcione. Se você não tiver um, simplesmente use algo assim em um de seus arquivos de inicialização (como ~/.bash_profile ):

PATH=$PATH:$HOME/go/bin

(Claro, se você definir $GOBIN , use PATH=$PATH:$GOBIN .)

Em relação a não ter as variáveis de ambiente Golang definidas, atualmente você não precisa delas para a maioria dos casos.

A variável $GOROOT aponta para onde a instalação do Golang foi descompactada. Se você usar a distribuição "oficial", o padrão será /usr/local/go , portanto, se você descompactar a distribuição nesse diretório, não precisará defini-la. As distribuições Linux geralmente customizam esse padrão para onde eles empacotam arquivos Golang, no caso de Manjaro, o mais sensato /usr/lib/go . Independentemente disso, se você estiver usando um Golang empacotado de uma distro, ou se você descompactar o oficial para o local padrão, você não precisa desse conjunto de variáveis.

Em relação a $GOPATH , costumava ser necessário, mas desde o Golang 1.8 agora é padronizado como ~/go :

GOPATH can be any directory on your system. In Unix examples, we will set it to $HOME/go (the default since Go 1.8).

Então, novamente, se você está bem com os pacotes do Golang (por exemplo, aqueles que você usa go get ) sendo armazenados no local padrão, você não precisa configurá-lo também.

Por fim, $GOBIN é padronizado para o diretório bin em $GOPATH , então você normalmente não precisa personalizá-lo também.

Como você notou, você pode usar go env para checar qual é a noção de Golang sobre essas variáveis, se você deixá-las sem definição, nesse caso Golang deve usar os padrões descritos acima.

Claro, se você quiser se referir a estas variáveis a partir do shell, então você precisa configurá-las! O fato de Golang ter defaults para esses conceitos significa que será capaz de trabalhar com as variáveis não definidas ... Não que isso magicamente injetará essas informações em seu ambiente. E, mais uma vez, se você quiser os binários do Golang no seu $PATH , você terá que configurar isso, veja as instruções no topo da resposta.

    
por 28.11.2018 / 16:22