環境変数を正しく設定する方法(Manjaroのgolang)

環境変数を正しく設定する方法(Manjaroのgolang)

Goのインストールに問題があります。私はManjaroを使用していますが、ManjaroがUbuntuやWindowsの提案とは異なる方法でgo envを処理しているようですので、これに関連していると思います。

私はインストールし、期待どおりにコードを実行できます。

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

次に、環境変数が設定されていることを確認します。

$ echo $GOROOT

$ echo $GOPATH

$ echo $GOBIN

$

だからそういうわけではありませんが、おかしいですね。テストプログラムを実行できるのはなぜですか?別の方法で環境変数を確認してみました。

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

$ 

本当に面白いです。 Go自体は環境変数をある程度理解しているようです。そのため、どこからでも効率的にgoコードを実行できます。まだ解決されていない$GOPATH問題が1つあります。$GOBIN

まあ、これは私の〜/ .bash_profileを編集する必要があることを意味します。

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

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

いよいよ所望の結果を得た。

$ 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

$GOBINいいですね。これで同様のパッケージを使用できます。滑るまたは支店正しいですか?

[~]$ 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

まあ、そうではないかもしれません。だからグライドを試してみてください。

$ 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

知っていると、中にあったバッグは見つかり$GOBINませんでした。デバイスを再起動すると、何らかの理由ですべてがリセットされます。

この時点で私は何をすべきかわかりません。

答え1

go get使用またはインストールされたGolangバイナリを実行できる場合、これが正しく機能するためには、go installGolang "bin"ディレクトリをファイルに追加する必要があります。$PATH

ないので参考にしてください本物$GOBINこれが機能するには変数を設定する必要があります。存在しない場合は、初期化ファイルのいずれかで次のようなものを使用してください~/.bash_profile

PATH=$PATH:$HOME/go/bin

(もちろん、そうした場合は、$GOBIN代わりにそれを使用してくださいPATH=$PATH:$GOBIN。)


Golang 環境変数を設定しないことに関して、最近ではほとんど必要ありません。

この$GOROOT変数はGolangインストールの解凍位置を指します。 「公式」ディストリビューションを使用している場合はデフォルト値なので、そのディレクトリ/usr/local/goにディストリビューションを解凍して設定する必要はありません。 Linuxディストリビューションでは、このデフォルト値をパッケージ化されたGolangファイルの場所にカスタマイズすることが多く、Manjaroの場合はより合理的です/usr/lib/go。とにかく、ディストリビューションにパッケージされたGolangを使用するか、公式バージョンをデフォルトの場所に解凍すると、この変数になります。セットは必要ありません。

については$GOPATH以前は必須でしたが、Golang 1.8からデフォルトは~/go:

GOPATHシステムの任意のディレクトリにすることができます。 Unixの例では$HOME/go(Go 1.8以降のデフォルト)に設定されています。

したがって、Golangパッケージ(使用するパッケージなどgo get)をデフォルトの場所に保存することに同意すると、そのパッケージを設定する必要はありません。

最後に、$GOBINデフォルト値はbin$GOPATHしたがって、通常はカスタマイズする必要はありません。

ご存知のように、go envこれらの変数を設定しないと、Golangのこれらの変数の概念が何であるかを確認できます。この場合、Golangは上記のデフォルト値を使用する必要があります。

もちろん、シェルでこれらの変数を参照するには、その変数を設定する必要があります! Golangにこれらの概念のデフォルト値があるという事実は、Golangが設定されていない変数を使用できることを意味します。 Golangがこれらの変数を魔法のように環境に注入するという意味ではありません。もう一度言いますが、Golangバイナリをに含めるには$PATHこれを設定する必要があります。回答の上部にある指示をご覧ください。

関連情報