😶‍🌫️

goenvでgoをインストール

2017/07/29に公開

はじめに

機会は少ないかもしれませんが、goをインストールするたびにどのgoenvを使ってたか確認するのが面倒なので書き残しておこうと思います。

かなり初心者向けに書くのでだいたいの環境で構築できるはず!

goenvで最新のversionが見れない、表示されないという方は goenvのupdate を見てください。

環境

  • openSUSE LEAP 42.2
  • goenv 1.0.0

goenvについて

goのバージョン管理ツール。
プロジェクトごとにgoのバージョンが変わったりするときに便利です。

筆者は現在asdfかanyenv(goenv内包)を使うことが多いです。

goenv install

どの環境でもインストールしやすいようにgitでインストール

$ git clone https://github.com/syndbg/goenv.git ~/.goenv

URLが変わってたりリポジトリがなくなってたりした場合は他のリポジトリを探してください。

環境変数を設定します。
自分が使ってるシェルの設定ファイルに追記。(~/.bashrcや~/.zshrcなど)

~/.zshrc
export GOENV_ROOT=$HOME/.goenv
export PATH=$GOENV_ROOT/bin:$PATH
eval "$(goenv init -)"

追記したら

$ exec $SHELL
$ # または
$ source ~/.zshrc

反映されなかったらターミナルを再起動してみましょう。

goenv: system version not found in PATHと言われますが、golangをまだインストールしていない状態で goenv init - しているからなので気にせず進んでください。

その後

$ goenv -v

これでgoenv (任意のバージョン)が標準出力されればOK

go(golang) install

go自体をインストールします。
インストールできるバージョンは以下のコマンドで確認できます。

$ goenv install -l
  1.2.2
  1.3.0
  .
  .
  1.8.1
  1.8.3

今回は1.8.3をインストールします。

$ goenv install 1.8.3

現在インストール済みで使用できるgoのバージョン一覧を見てみましょう。

$ goenv versions
  1.8.3

インストールしたバージョンが表示されていれば使用できる状態にあるので使えるように設定します。

$ goenv global 1.8.3
$ goenv rehash

これで基本的にどこのディレクトリでも1.8.3のバージョンが使えるようになります。(rehashしないと変更されない場合があります)

$ goenv versions
* 1.8.3 (set by ~/.goenv/version)

この*がついているバージョンが現在設定されているグローバルなgoのバージョンです。

$ go version
go version go1.8.3 linux/amd64

とりあえず使えるようになりました。
このあとはプロジェクトなどに対応できるように環境変数を設定します。

$GOPATHを設定しますが好きなディレクトリに設定します。
自分はホームディレクトリに設定してます。(ホームディレクトリに設定する人が多い気がする)

~/.zshrc
export GOPATH=$HOME/go
PATH=$PATH:$GOPATH/bin

上記の記述を追加後

$ source ~./.zshrc
$ mkdir -p $GOPATH/src/github.com/{ユーザー名}
$ cd $GOPATH/src/github.com/{ユーザー名}
$ git clone {gitのプロジェクト}

これで動くはず!
動かなかったらコメントください。

goenv2系について

$ goenv --version
goenv 2.0.0beta11

で2系の方。

goenvのバージョンアップに伴い、GOPATHの設定が自動になりました。
以下の通り、eval "$(goenv init -)"によって設定してくれます。.

Add goenv init to your shell to enable shims, management of GOPATH and GOROOT and auto-completion. Please make sure eval "$(goenv init -)" is placed toward the end of the shell configuration file since it manipulates PATH during the initialization.

~/.zshrc
export GOENV_ROOT="$HOME/.goenv"
export PATH="$GOENV_ROOT/bin:$PATH"
eval "$(goenv init -)"
export PATH="$GOROOT/bin:$PATH"
export PATH="$PATH:$GOPATH/bin"

上記の設定を行い、例としてgoのバージョン1.8.2をインストール後GOPATHの確認。

$ goenv install 1.18.2
$ goenv global 1.18.2
$ goenv rehash
$ exec $SHELL # GOPATHの切り替え
$ echo $GOPATH
~/go/1.18.2

この様に設定されるため、以下の様にディレクトリを作成してあげると良いです。
(以前は自動的にバージョンのディレクトリも作られた記憶がありますが今回は作られなかったです。)

$ mkdir -p $GOPATH/src/github.com/{ユーザー名}/{リポジトリ名}

goenvのupdate

golangのlatest versionがインストール一覧に表示されないことがあります。
原因としては単純にgoenvのversionが古いからなので、localに最新版のgoenvを落としてきましょう。

$ cd $GOENV_ROOT
$ git pull origin master
$ goenv install -l

おまけ

プロジェクトごとのenvの設定などでgoのバージョンがグローバルじゃないのを使うことがあるはずだったので気をつけましょう。
goenvについてはどれもそんなに変わりませんが自分が使いやすいと思ったものにしました。
インストールできるバージョンが見れないgoenvもあるので注意。

Discussion