Go1.11でgo modを使う方法と注意点
Goのバージョン1.11がリリースされてvgoがgoのサブコマンドに取り込まれた go modとは
パッケージ管理用のgoのサブコマンド
今までdepという公式のgoとは別のコマンドで行っていた管理していた go modはgoコマンドのサブコマンドなので、今までdepを追加でインストールしていたのが不要になった
基本的な使用の流れ
https://gyazo.com/fe53a51bb1e50262195c52be8ca74dce
実際にgo modを使う
export GO111MODULE=onを.bashrcとかに書く
GOPATH配下に新規でプロジェクト(フォルダ)を作成する
go mod initとコマンドを実行する
go.modというファイルが生成される
外部パッケージをimportしたGoのプログラムを書く
go buildする
ソース内に書いているパッケージが自動で取得される
$GOPATH/pkg/mod配下にリビジョン番号かタグ番号と一緒に配置されている
go.modが更新される
追加でパッケージが必要になったときは
今まで通り go getでパッケージを指定して取得する
go.modが更新される
注意点
export GO111MODULE=onしていると単純にCLIツールをgo getでインストールしていたのがエラーになる
エラーになる例:
cd /tmp && go get -u golang.org/x/tools/...
go: cannot find main module; see 'go help modules'
go.modが存在しないために発生する
回避策
一時的に環境変数GO111MODULEを無効化してgo getする
GO111MODULE=off go get -u golang.org/x/tools/...
でOK
GOPATH/binにインストールされていることが確認できる
逆にいうと、前述の環境変数をセットしなければ今までどおりgo getできるし、go buildでパッケージ管理しないようにできる
depを引き続き使いたいなら環境変数を設定しないのもあり
変数の名前の感じからしても、Google的にはGO111MODULE変数あんまり使ってほしくないんだろうな GOPATH配下でリポジトリ管理しないのがこれからのデファクトになっていくんだろうか