Libra Studio Log

開発に関することやゲーム、ガジェットなどについてつらつらと書き記しています

GolangのGOPATHやGOROOTについて

f:id:daihase:20190809022658p:plain

※こちらの情報は最新のGo1.16(2021.7現在)では古いものとなっています。 Goの環境構築に関しては下記を参照ください。 tech.librastudio.co.jp



こんにちは、daihaseです。

Goの環境をインストールする際など、ググるとよくGOROOTやGOPATHについて色々出てくると思います。こちらどういった環境にするかにもよりますが、基本的に以下のように考えて問題ありません。

 

  • GOROOTは基本設定しなくて良い
  • GOPATHは個人がGoのプロジェクトを配置したい場所に(例: $HOME/go など)
  • GOPATHに合わせたPATHの設定を行う ($HOME/goならば$GOPATH/bin)

 

特にGOPATHに関しては、昔はこのGOPATHをわけることもありましたが、Go1.8よりプロポーザルによりGOPATHが未設定の場合、デフォルトで$HOME/goとなるようになりました。

3つ目のは$PATHに$GOPATH/binを追加する作業ですね。実際の設定を見ると以下のような感じです。

 

export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin

 

基本的にこの2つが設定してあればGoを使う環境としては完了です。 では1つ目のGOROOTは一体何なのか?

 

これは一言でいうと自分でGoをインストールする場所を変えたい場合に設定するものです。実際にGoをインストールした後にgo envとターミナルで実行すればわかりますが、GOROOTはインストール方法によって自動で決定されます。

 

MacのHomebrewでインストールした場合 /Users/daihase/usr/local/Cellar/go/1.10/libexec

 

LinuxのUbuntuでaptからインストールした場合は /usr/lib/go

 

など。

GOROOTは例えばLinuxのバイナリを/usr/local/goに展開する想定となっているのを、手動で置き換えた場合に設定する値ということですね。

公式にも書いてますが、例えばホームディレクトリに設定したければ、.profileや.zshrcに

export GOROOT=$HOME/go
export PATH=$PATH:$GOROOT/bin

 

このように設定してやれば大丈夫です。GOROOTの役割がわかりましたね。

 

ちなみに余談ですが$GOPATHは外部から取得したパッケージをビルドしたりインストールするのに必要な環境変数ですが、これを実行するgo get、このコマンドによって得た内容をGOPATHの最初のパスにダウンロードするという役割があります。

そのため、通常でしたら$HOME/goとした場合自分のプロジェクトと外部からとってきたパッケージが1つのディレクトリに混在するのですが、以下のようにしてやることでプロジェクトはworkspace、外部パッケージはpackageへダウンロードするよう切り分けが出来ます。

# GOPATH, GOROOT
export GOPATH=$HOME/go/package:$HOME/go/workspace
export PATH=$HOME/go/package/bin:$HOME/go/workspace/bin:$PATH

 

これで管理も綺麗になりますね。

それでは良い開発ライフを〜