Go Moduleとgoenvを使った環境設定

f:id:daihase:20190809022658p:plain

こんにちは、daihaseです。およそ2年ぶりくらいの投稿です。 最近仕事が色々目まぐるしく変わっていて、更新する余裕がなかったので滞っていましたが、また少しずつやっていければと思います。

さて、本日はGo Moduleについて。 Go ModuleはGo1.13から導入されたGo言語公式の依存パッケージ管理ツールです。 そのため、かつての$GOPATH/src配下にプロジェクトを作らないといけないといった制約がなくなりました。 (よってここの記事は古い情報になりますのでご注意を...)

Go Moduleの仕組みやそれ自体の説明は他の方も書かれているので、ここではサクっと最新のGo環境を整えることをゴールとします。

goenvのインストール

Home brewの場合はこちら

$ brew install goenv

Gitの場合はこちら

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

goenvのPATHを通す

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

追記した後は以下のコマンドでzshを更新します。

$ source ~/.zshrc  

また以下を入力してバージョンを確認しておきましょう。

goenv -v
goenv 2.0.0beta11

Goのインストール

次に以下のコマンドでGoをインストールします。 インストール可能なバージョンがリストで表示されるので、任意のバージョンをインストールしましょう。

goenv install -l
Available versions:
  1.2.2
  1.3.0
  1.3.1
  1.3.2
  1.3.3
  1.4.0
  1.4.1
...
..
.

 1.15beta1
 1.15rc2

バージョン番号を指定しインストールします。

$ goenv install 1.**.*

インストールが完了したら、以下コマンドでglobal設定を行います。

$goenv global 1.**.*

最後にちゃんと指定したバージョンになっているか確認します。

go version
go version go1.15 darwin/amd64

GOPATHなどの設定

go getでインストールするパッケージなどをディレクトリとしてGOPATHを設定する必要があるので追記しましょう。 上記で設定したgoenvのPATHと合わせて以下のようになっていれば問題ありません。

export GOPATH=$HOME/go
export GOENV_ROOT=$HOME/.goenv
export PATH="$GOENV_ROOT/bin:$PATH"
eval "$(goenv init -)"
export PATH="$GOROOT/bin:$PATH"
export PATH="$PATH:$GOPATH/bin"
export GO111MODULE=on // 1.13 以降は不要

※コメントにもありますが、環境変数$GO111MODULEに関してはモジュール対応モードがデフォルトで有効となります。

プロジェクトの作成

任意のディレクトリ上で以下を実行し初期化します。

go mod init github.com/${GITHUB_USER}/${PROJECT_NAME}

これでディレクトリ直下に go.modが作成されます。 (なお間違えたらこちらのファイルを削除し、go mod init からやり直せばOKです)

次にhello.goを作成し、以下のようなコードを書いてみます。

package main

import (
    "fmt"
    "rsc.io/quote"
)

func main() {
    fmt.Println(quote.Hello())
}

プロジェクトの実行

以下のコマンドで作成したコードを実行してみましょう。

go run hello.go
...
go: finding module for package rsc.io/quote
go: downloading rsc.io/quote v1.5.2
go: found rsc.io/quote in rsc.io/quote v1.5.2
go: downloading rsc.io/sampler v1.3.0
go: downloading golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c
Hello, world.

go runはコンパイル(go build) + 実行までを行うコマンドです。 ちゃんと Hello, world が表示されていますね。

※Go1.16以降はgo buildによるパッケージのインストールが廃止となっています。 go mod tidy or go get <パッケージ名>@<指定するバージョン> でインストールした後、 go build or go run を実行してください。

どうでしょうか、$GOPATH/src時代の開発に比べるとずいぶんシンプルになったかと思います。 それでは良い開発ライフを〜