10分で終わるGo言語の開発環境構築

環境構築に時間を取られるのはもったい。
凝るのは後々！最低限のものを準備して早々に書きたいという人へ

## 実行環境
* OS : OS X Yosemite
* エディタ:[Sublime Text3](https://www.sublimetext.com/3)

## HomeBrewのセットアップ
* HomeBrewのアップデート
 * `$ brew update`で完了

> [HomeBrew](http://brew.sh/index_ja.html)がない場合
> 
> ```
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

## GoLangのセットアップ

* インストール

```
$ brew install go
```

* 確認

```sh
$ go version
go version go1.4.2 darwin/amd64
```

* Goのワークスペースを作成
 * GoのソースコードやGoの実行可能ファイル、並びにコンパイル済みのパッケージファイルを保存する為のディレクトリを持つワークスペースが必要なので作成する

```sh
# Goのワークスペース構成
# src/ ソースコードを保存する（例えば：.go .c .h .s等） 
# bin/ コンパイル後に生成される実行可能ファイル
# pkg/ コンパイル後に生成されるファイル（例えば：.a）
$ mkdir ~/code/golang/{src,bin,pkg}

```




*  PATH設定を~/.zprofileもしくは~/.bash_profileに追加して反映で完了

```sh
$ echo export GOROOT=/usr/local/opt/go/libexec >> ~/.zprofile
$ echo export GOPATH=$HOME/code/golang >> ~/.zprofile
$ echo export PATH=$PATH:$GOROOT/bin:$GOPATH/bin >> ~/.zprofile
$ source ~/.zprofile
```


## 外部ライブラリの追加

### [goimports](https://godoc.org/golang.org/x/tools/cmd/goimports)
過不足のimportを自動で良きに計らってくれる

* インスール

```
$ go get golang.org/x/tools/cmd/goimports
```

* 確認

```sh
$ goimports -help
usage: goimports [flags] [path ...]
  -d=false: display diffs instead of rewriting files
  -e=false: report all errors (not just the first 10 on different lines)
  -l=false: list files whose formatting differs from goimport's
  -srcdir="": choose imports as if source code is from `dir`
  -w=false: write result to (source) file instead of stdout
```

### [goCode](https://github.com/nsf/gocode)のインストール
Goのヘルパー機能を提供してくれる

* インストール

```
$ go get -u -v github.com/nsf/gocode
```

* 確認

```sh
gocode -help
Usage: gocode [-s] [-f=<format>] [-in=<path>] [-sock=<type>] [-addr=<addr>]
       <command> [<args>]

Flags:
  -addr="127.0.0.1:37373": address for tcp socket
  -debug=false: enable server-side debug mode
  -f="nice": output format (vim | emacs | nice | csv | json)
  -in="": use this file instead of stdin input
  -profile=0: port on which to expose profiling information for pprof; 0 to disable profiling
  -s=false: run a server instead of a client
  -sock="unix": socket type (unix | tcp)

Commands:
  autocomplete [<path>] <offset>     main autocompletion command
  close                              close the gocode daemon
  status                             gocode daemon status report
  drop-cache                         drop gocode daemon's cache
  set [<name> [<value>]]             list or set config options
```

### [godef](github.com/rogpeppe/godef)の追加
呼び出し先関数へのジャンプ機能などを強化してくれる

* インストール

```
$ go get -v github.com/rogpeppe/godef
```

* 確認

```sh
godef -help 
usage: godef [flags] [expr]
  -A=false: print all type and members information
  -a=false: print public type and member information
  -acme=false: use current acme window
  -debug=false: debug mode
  -f="": Go source filename
  -i=false: read file from stdin
  -o=-1: file offset of identifier in stdin
  -t=false: print type information
```

### [Go Oracle](https://godoc.org/golang.org/x/tools/cmd/oracle)の追加
静的解析ツールを提供してくれる

* インストール

```
go get -u -v golang.org/x/tools/cmd/oracle
```

* 確認

```sh
 oracle -help
Run 'oracle -help' for more information.
Go source code oracle.
Usage: oracle [<flag> ...] <mode> <args> ...
```

### [Golint](https://github.com/golang/lint)の追加
Go言語用のlintを提供

* インストール

```
$ go get -u github.com/golang/lint/golint
```

* 確認

```
$ golint -help
Usage of golint:
  golint [flags] # runs on package in current directory
  golint [flags] package
  golint [flags] directory
  golint [flags] files... # must be a single package
Flags:
  -min_confidence=0.8: minimum confidence of a problem to print it
```

## Sublime Text3のプラグインを追加
すべてPackegeControlで追加します。`Command+Shift+p`でコマンドパレッドを開いてinstallです。

### [GoSublime](https://github.com/DisposaBoy/GoSublime)の追加

1. PackegeControlでGoSublimeをインストール
 * `gosublime`と入力してGoSublimeを選択 
1. インストール後以下のアナウンスが出るのでSublimeを再起動する

```sh
GoSublime appears to have been updated.
New ANNOUNCE: `a16.01.09-1`, current ANNOUNCE: `a16.01.09-1`
You may need to restart Sublime Text.
```

### [SublimeLinter-contrib-golint](https://github.com/sirreal/SublimeLinter-contrib-golint)の追加
Golintをsublimeで使えるようにするプラグイン

> 【SublimeLinterが入っていない場合】
> PackegeControlで`sublimelinter`と入力して[SublimeLinter](http://www.sublimelinter.com/en/latest/)を追加 

1. PackegeControlで`golint`と入力。`SublimeLinter-contrib-golint`を選択してインストール 
1. インストール後、再起動する
2. 設定の変更
  * Preference > Package Settings > SublimeLinter > Settings - Userで設定を開いて`paths`の対応するOSのkey名に対して`$GOPATH/bin`をフルPATHで記載する
  
```json
        "mark_style": "solid underline",
        "no_column_highlights_line": false,
        "passive_warnings": false,
        "paths": {
            "linux": [],
            "osx": [
                "/hoge/hoge/code/golang/bin"
            ],
            "windows": []
        },
```

完了後はSublimeTextを再起動して完了


### Golintが動かない場合
デバッグモードにしてコンソールに出力されるデバッグログを見るのが早いです

1. Tools > SublimeLinter > Setting - Debug Mode を選択
1. `Control + `` でコンソールを開く
1. 出力ログを確認して適宜修正 


## 参考
* [GOPATHとワーキングディレクトリ](https://github.com/astaxie/build-web-application-with-golang/blob/master/ja/01.2.md)
* [ソースコードの静的解析ツール Go Oracleを使ってみた](https://github.com/goken/goken/blob/master/goken10-oracle/goken10-oracle.md)
* [SublimeText3でのGo言語開発環境セットアップ](http://qiita.com/MakoTano/items/4407d51f4ec28684958e)