GOPATH / Go Modules

目的

GOPATHのデメリットや、Go Modulesのコマンド周りをあまり理解しておらず、無意識にgo mod tidyをしていたので、このタイミングを機にGoを基礎から理解しようという試みで記事を書きました。

基礎知識

  • GOPATH:外部パッケージなどが保存されるパス
  • GOROOT:Goのインストールパス

GOPATHでは何がつらかったのか?

  • $GOPATH/src 配下でしか開発ができなかった
  • 外部パッケージをリビジョン込みで一元管理するため、プロジェクトごとで異なるリビジョンのパッケージを利用したい際は一手間加える必要がある

Go Modulesの導入

export GO11MODULE=on
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
$ cd ${WORK_DIR}
$ go mod init github.com/${GITHUB_ACCOUNT}/{$APP_NAME} # これは慣習っぽい
$ go install ${PACKAGE}

Go Modulesでよく使うコマンド一覧

  • go get:バイナリのインストール
    • 利用の有無に関わらず、go.modに追記される(go mod tidyで削除可能)
    • インストールとしての機能は削除されている(GO11MODULE=offにすれば可能)
  • go install:バイナリのインストール(バージョン指定可能)
  • go mod tidy:不要モジュールの削除と新規モジュールの追加

Goを使うときに参考になるリンク