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

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

# 環境

+ macOS
+ Homebrew
+ Go (v1.13.4)

# やってみたこと

## インストール

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

```bash
$ brew install go
```

## 確認

### バージョン確認

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

```bash
$ go version
go version go1.13.4 darwin/amd64
```

### 実行環境の確認

次に、[公式のスタートガイド](https://golang.org/doc/install?download=go1.13.5.darwin-amd64.pkg) から、実行環境のテストを進めます。

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

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

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

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

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

>
※もしVimコマンドの操作が分からないという方がいれば、下記のリンクを参照してください。
>
+ [よく使う Vim のコマンドまとめ](https://qiita.com/hide/items/5bfe5b322872c61a6896)

```go:hello.go
package main

import "fmt"

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

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

```bash
$ 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)` ってそもそも存在しないのでは？
となったので、その辺を調べてみます。

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

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

(*゜∇゜*)(*。_。*)(*゜∇゜*)(*。_。*)ｳﾝｳﾝ♪

## 環境変数を確認

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

```bash
$ 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` が存在しないディレクトリを指定していますね。
この辺を変更すれば解決しそうです。

# 修正する

## 環境変数の変更

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

```bash
# 環境変数の追加
$ 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` の３箇所が正常に修正されていることを確認します。

```bash
$ 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"

# 再び実行してみる

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

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

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

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

```bash
$ ./hello
hello, world
```

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

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

# 関連URL

>
+ [A Tour of Go]
+ [Getting Started - The Go Programming Language](https://golang.org/doc/install?download=go1.13.5.darwin-amd64.pkg)
+ [よく使う Vim のコマンドまとめ - Qiita](https://qiita.com/hide/items/5bfe5b322872c61a6896)

[A Tour of Go]:https://go-tour-jp.appspot.com/