MacにGoをインストールする


とりあえずGoを始めようとして、A Tour of Go をやってみました。
が、その事前準備のインストールで躓きました…。
これから同じような経験をする方がいらっしゃるのではないかと思い、備忘録も兼ねて投稿します。
よりよい方法やバグ等ございましたら、アドバイスいただけると光栄です。

環境

  • macOS
  • Homebrew
  • Go (v1.13.4)

やってみたこと

インストール

とりあえず、HomebrewでGoをインストールします。

$ brew install go

確認

バージョン確認

インストールが完了したら、バージョンの確認をします。

$ go version
go version go1.13.4 darwin/amd64

実行環境の確認

次に、公式のスタートガイド から、実行環境のテストを進めます。

# 実行環境のディレクトリを作成
$ mkdir -p ~/go/src/hello

# 作成したディレクトリへ移動
$ cd ~/go/src/hello

# テスト用のファイルを作成
$ touch hello.go

# テスト用のファイルを編集
$ vi hello.go

hello.goの中身は以下のように編集します。

※もしVimコマンドの操作が分からないという方がいれば、下記のリンクを参照してください。

hello.go
package main

import "fmt"

func main() {
    fmt.Printf("hello, world\n")
}

編集が完了したら、ビルドしてバイナリファイルを生成します。

$ go build
hello.go:3:8: cannot find package "fmt" in any of:
        /Users/username/go/src/fmt (from $GOROOT)
        /usr/local/go/src/fmt (from $GOPATH)
package hello
        imports runtime: cannot find package "runtime" in any of:
        /Users/username/go/src/runtime (from $GOROOT)
        /usr/local/go/src/runtime (from $GOPATH)

...........( ̄ω ̄;)エートォ...

何か様子がおかしいぞ。

調べてみる

Homebrewでインストールした場合、/usr/local/Cellar/go/ 配下にバージョン毎にディレクトリが作成されるはずです。
そうすると、エラーの中にある /usr/local/go/src/fmt (from $GOPATH) ってそもそも存在しないのでは?
となったので、その辺を調べてみます。

$ cd /usr/local/go
bash: cd: /usr/local/go: No such file or directory

やっぱりない!!こいつか!!!!

(゜∇゜)(。_。)(゜∇゜)(。_。)ウンウン♪

環境変数を確認

go env でGo言語関連の環境変数を確認できるので、一応確認します。

$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/username/Library/Caches/go-build"
GOENV="/Users/username/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/usr/local/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/Users/username/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/Users/username/go/pkg/tool/darwin_amd64"
GCCGO="gccgo"
...

やはり、GOPATH が存在しないディレクトリを指定していますね。
この辺を変更すれば解決しそうです。

修正する

環境変数の変更

下記コマンドで変更が必要な環境変数を追加します。

# 環境変数の追加
$ echo 'export GOPATH=$HOME/go' >> ~/.bash_profile
$ echo 'export GOROOT=/usr/local/Cellar/go/1.13.4/libexec' >> ~/.bash_profile
$ echo 'export GOTOOLDIR=/usr/local/Cellar/go/1.13.4/libexec/pkg/tool/darwin_amd64' >> ~/.bash_profile
$ echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.bash_profile

# bash_profileを更新
$ source ~/.bash_profile

変更の反映を確認

GOPATH GOROOT GOTOOLDIR の3箇所が正常に修正されていることを確認します。

$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/username/Library/Caches/go-build"
GOENV="/Users/username/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/username/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/Cellar/go/1.13.4/libexec"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/Cellar/go/1.13.4/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
...

それぞれ、下記のように変更されていることを確認してください。

GOPATH="/Users/username/go"
GOROOT="/usr/local/Cellar/go/1.13.4/libexec"
GOTOOLDIR="/usr/local/Cellar/go/1.13.4/libexec/pkg/tool/darwin_amd64"

再び実行してみる

修正できたので、再度ビルドしてみます。

# 作成したディレクトリへ移動
$ cd ~/go/src/hello

# ビルドしてバイナリファイルを生成
$ go build

特に問題がなければ、エラーが出ずに完了します。
念の為、問題なくビルドできたことを確認するために、バイナリファイルを実行します。

$ ./hello
hello, world

上記のように hello, world と表示されれば完了です。

これで無事、Goのインストールと実行環境のテストまでが完了しました!
今後は、A Tour of Go を進めるもよし、プロジェクトを作成してガシガシ開発を進めるもよし、
素敵なGoライフを楽しんでください!!

関連URL