[Go] macでGo(ver1.8)の開発環境を整える

# 目次

- インストール
- Go環境情報の確認/設定
- IDEの設定/サンプル実装/実行
- コンソール実行

# 詳細

## インストール

brewでインストールできます。

```bash:インストール
➜  ~ homebrew install go
```

インストール完了後、バージョンを確認してみます。

```bash:バージョン確認
➜  ~ go version
go version go1.8 darwin/amd64
```

## Go環境情報の確認/設定


### Go環境情報の確認
Go環境情報を確認するのに、`go env`を実行します。


```bash:Go環境情報を出力
➜  ~ go version
go version go1.8 darwin/amd64
➜  ~ go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/omega/go"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.8/libexec"
...<中略>
➜  ~
```

なお`go env`コマンドに単一、もしくは複数の環境変数を指定して、
指定した環境変数を指定した順に出力することもできます。

```bash:Go環境情報を出力:引数に環境変数を指定した場合
➜  ~ go env GOPATH
/Users/omega/go
➜  ~ go env GOPATH GOROOT
/Users/omega/go
/usr/local/Cellar/go/1.8/libexec
➜  ~
```
参考:[Goコマンドマニュアル](http://golang-jp.org/cmd/go/)

GOROOTはGOをインストールしたパスを示します。

```bash:GOROOTの確認
➜  ~ cd /usr/local/Cellar/go/1.8/
➜  1.8 ls
AUTHORS              LICENSE              bin
INSTALL_RECEIPT.json README.md            libexec
➜  1.8 ls -lt
total 96
-rw-r--r--   1 omega  admin   1063  4  1 13:16 INSTALL_RECEIPT.json
-rw-r--r--   1 omega  admin  33243  2 17 04:12 AUTHORS
-rw-r--r--   1 omega  admin   1479  2 17 04:12 LICENSE
-rw-r--r--   1 omega  admin   1399  2 17 04:12 README.md
drwxr-xr-x   5 omega  admin    170  2 17 04:12 bin
drwxr-xr-x  16 omega  admin    544  2 17 04:12 libexec
➜  1.8 pwd
/usr/local/Cellar/go/1.8
➜  1.8 cd libexec
➜  libexec ls -lt
total 144
-rw-r--r--    1 omega  admin   1366  2 17 04:12 CONTRIBUTING.md
-rw-r--r--    1 omega  admin  45710  2 17 04:12 CONTRIBUTORS
-rw-r--r--    1 omega  admin   1303  2 17 04:12 PATENTS
-rw-r--r--    1 omega  admin      5  2 17 04:12 VERSION
drwxr-xr-x   14 omega  admin    476  2 17 04:12 api
drwxr-xr-x    5 omega  admin    170  2 17 04:12 bin
drwxr-xr-x   44 omega  admin   1496  2 17 04:12 doc
-rw-r--r--    1 omega  admin   5686  2 17 04:12 favicon.ico
drwxr-xr-x    3 omega  admin    102  2 17 04:12 lib
drwxr-xr-x   15 omega  admin    510  2 17 04:12 misc
drwxr-xr-x    7 omega  admin    238  2 17 04:12 pkg
-rw-r--r--    1 omega  admin     26  2 17 04:12 robots.txt
drwxr-xr-x   68 omega  admin   2312  2 17 04:12 src
drwxr-xr-x  268 omega  admin   9112  2 17 04:12 test
➜  libexec
```


なおGOPATHは開発する際のWorkSpaceを示しています。


### Go環境情報の設定
今回ホームディレクトリ($HOME)内のdevディレクトリで開発をしたいので、
GOPATH環境変数の値を変更してみます(Goの開発WorkSpaceを変更する)。
なお変更した後にGOPATHのbinへのパスを通しておきます。
これはこの後サンプルコードをコンパイル後、
binパス内に実行形式のファイルが配置されるためです。

```bash:GOPATH環境変数値の変更
➜  ~ echo $HOME
/Users/omega
➜  ~ find dev
find: dev: No such file or directory
➜  ~ mkdir dev
➜  ~ export GOPATH=$HOME/dev　　　　　　　　　　#GOPATH環境変数を$HOME/devに変更
➜  ~ go env GOPATH
/Users/omega/dev
```

```bash:GOPATHのbinのパスを通す
➜  ~ export PATH=$PATH:$GOPATH/bin
```

最後にGOPATHのWorkSpace内にsrcディレクトリを作成した後、
src内にサプディレクトを作成します(1つのサブディレクトリが1つのパッケージに対応)。

```bash:
➜  dev pwd
/Users/omega/dev
➜  dev mkdir src
➜  dev cd src
➜  src mkdir base
```

# IDEの設定/サンプル実装/実行
GoのIDEはJetBrains社のGoglandのEAP版を使ってみました。 
https://www.jetbrains.com/go/

インストールしたら、「Create New Project」を選択、
![image](https://qiita-image-store.s3.amazonaws.com/0/150252/89092010-f430-fb97-3949-0f2a7ac8b61b.png)

開発作業するWorkSpaceをlocationに設定します。
![image](https://qiita-image-store.s3.amazonaws.com/0/150252/1688ab27-db87-2b7f-03a8-430a5436bd6e.png)

プロジェクト画面で先ほど作成していたbaseディレクトリの位置で右クリック
![image](https://qiita-image-store.s3.amazonaws.com/0/150252/ffc5682d-0431-b006-0189-b4dd721dbf48.png)

[New]->[Go File]を選び、
![image](https://qiita-image-store.s3.amazonaws.com/0/150252/b307bfd3-d790-ceb3-6740-c41cc8a699e2.png)

goファイルを作成します。
![image](https://qiita-image-store.s3.amazonaws.com/0/150252/674c2e12-f4cb-e634-4b5a-bc84da54f2fb.png)

IDEにGOROOT,GOPATHを設定します。
![image](https://qiita-image-store.s3.amazonaws.com/0/150252/5d64dd97-dc61-21bc-2b8c-8235c0cc5900.png)

Golandのmenuから、[Goland-EAP]->[Preferences]->Go->GOROOTにて、GOROOTを選択。
![image](https://qiita-image-store.s3.amazonaws.com/0/150252/21c1caff-6568-9098-79c6-159268f3f201.png)

同じく[Preferences]->Go->GOPATHにて、GOPATHを選択。
![image](https://qiita-image-store.s3.amazonaws.com/0/150252/04517aab-1782-c0d4-1c9f-754bf4d8b120.png)

コードを書いていきます、コード補完されて快適。
![image](https://qiita-image-store.s3.amazonaws.com/0/150252/b6e012ed-4397-e50c-f76b-8e248fc52201.png)

以下のサンプルコードを書いて保存。

```first.go
package main

import "fmt"

func main() {
	fmt.Println("go first!")
}
```



メニューの[Run]->Runを実行(適宜ショートカットで)、
![image](https://qiita-image-store.s3.amazonaws.com/0/150252/b7ec1ae6-40f8-c2b6-0ecf-f30bf9865915.png)

実行結果が出力されました。

# コンソール実行

IDEの時と同様に、コンソールコマンドからもコンパイルして実行してみます。

```bash:Goプログラムをコンパイルし実行
➜  dev go run src/base/first.go
go first!
```

またパッケージのコンパイル(依存関係含め)とインストールを行うには、`go install パッケージ名`を使います。
※コマンドオプションの詳細は[マニュアル](http://golang-jp.org/cmd/go/)をご参照

```bash:パッケージのコンパイルとインストール
➜  dev go install base
➜  dev ls
bin src      # binディレクトリが生成
➜  dev cd bin
➜  bin ls
base　　　　　　　　　　　　　　　　　　# 実行形式のファイルが作成されている
```

なお`go build　パッケージ名`は指定したパッケージについて、
依存関係も含めてコンパイルしますが、コンパイルしたパッケージのインストールは行われません。

```bash:main以外のパッケージをbuild
➜  dev find src/web
src/web
src/web/web.go
➜  dev go build web
➜  dev ls
bin src
➜  dev cd bin
➜  bin ls
base
```

例外として、以下の場合は実行可能ファイルがカレントディレクトリに出力されます。

>コマンドラインで単一のmainパッケージが指定された場合、buildの結果として実行可能ファイルが出力されます。それ以外の場合はパッケージをコンパイルしますが結果は破棄されます。パッケージがbuildできることのチェックができるのみとなります。
[Goパッケージと依存関係のコンパイルより](http://golang-jp.org/cmd/go/#hdr-Go________________)

```bash:mainパッケージをbuild
➜  dev go build base
➜  dev ls
base bin  src　　　#baseという実行可能ファイルが出力されてる
```