MacでGo開発環境構築

## 概要
MacでGo言語開発を行うための環境構築について、以下を使用することを前提にまとめます。

* パッケージマネージャー: Homebrew
* 開発エディター: Vim (+vim-plug)

## Goインストール（Homebrew）
```bash
$ brew install go
==> Downloading https://homebrew.bintray.com/bottles/go-1.6.3.el_capitan.bottle.1.tar.gz
######################################################################## 100.0%
==> Pouring go-1.6.3.el_capitan.bottle.1.tar.gz
==> Caveats
As of go 1.2, a valid GOPATH is required to use the `go get` command:
  https://golang.org/doc/code.html#GOPATH

You may wish to add the GOROOT-based install location to your PATH:
  export PATH=$PATH:/usr/local/opt/go/libexec/bin
==> Summary
🍺  /usr/local/Cellar/go/1.6.3: 5,778 files, 328.4M
% which go
/usr/local/bin/go
```

## GOPATH環境変数
`go get`コマンドでパッケージをダウンロードするパスを指定します。
GOPATHは好きな場所を設定可能です。

```bash
$ export GOPATH=$HOME/.go
$ export PATH=$PATH:$GOPATH/bin
```
* bashrc設定

```bash
## Go 環境設定
if [ -x "`which go`" ]; then
    export GOPATH=$HOME/.go
    export PATH=$PATH:$GOPATH/bin
fi
```


このパス指定だが、プロジェクトごとにパッケージをダウンロードする領域を分ける事ができず、全てのプロジェクトのパッケージがこのパスにダウンロードされてしまうという課題があるよう!

* 対応策：[これからGoを始める人のためのTips集 | The Wacul Blog](http://blog.wacul.co.jp/blog/2014/08/22/go/)

## Hello World!
#### ソースコード
```hello.go
package main

import "fmt"

func main() {
    sayHello()
}

func sayHello() {
    fmt.Println("Hello World!")
}
```
#### 実行
* 実行

```bash
$ go run hello.go
Hello World!
```

* コンパイル（依存関係含む）して実行ファイルを作成 & 実行

```bash
$ go build hello.go
$ ./hello
Hello World!
```

## Vimで入力補完

#### vim-go
Go開発用vimプラグイン [fatih/vim-go](https://github.com/fatih/vim-go) をインストールします。

```
Plug 'fatih/vim-go'
```

#### gocode
Goで入力補完を行うために[gocode](https://github.com/nsf/gocode) をインストールします。

```
Plug 'nsf/gocode', { 'rtp': 'vim', 'do': '~/.vim/plugged/gocode/vim/symlink.sh' }
```

これで<C-x><C-o>を入力することで補完が行えるようになりました。


## もっと便利にするための.vimrc設定

```bash
" --------------------------------
" vim-plug
" --------------------------------
call plug#begin('~/.vim/plugged')
  Plug 'junegunn/vim-plug',
        \ {'dir': '~/.vim/plugged/vim-plug/autoload'}
  Plug 'fatih/vim-go'
  Plug 'nsf/gocode', { 'rtp': 'vim', 'do': '~/.vim/plugged/gocode/vim/symlink.sh' }
call plug#end()
：
:
" vim-go設定
au FileType go nmap <leader>r <Plug>(go-run)
au FileType go nmap <leader>b <Plug>(go-build)
au FileType go nmap <leader>t <Plug>(go-test)
au FileType go nmap <leader>c <Plug>(go-coverage)
au FileType go nmap <Leader>i <Plug>(go-info)

au FileType go nmap <Leader>gd <Plug>(go-doc)
au FileType go nmap <Leader>gv <Plug>(go-doc-vertical)
au FileType go nmap <Leader>gb <Plug>(go-doc-browser)

au FileType go :highlight goErr cterm=bold ctermfg=214
au FileType go :match goErr /\<err\>/

let g:go_highlight_functions = 1 
let g:go_highlight_methods = 1 
let g:go_highlight_structs = 1 
let g:go_highlight_operators = 1 
let g:go_highlight_build_constraints = 1 
let g:go_fmt_fail_silently = 1 
let g:go_fmt_autosave = 0 
```

+ ["err"という文字列をHighlightしておくとGolangのコードリーディングが捗る](http://yuroyoro.hatenablog.com/entry/2014/08/12/144157)

## 参考
* [Go言語で開発を始める前のvimの設定 - Qiita](http://qiita.com/taizo/items/0e7d25af8417541f7d42)
* [Golang開発環境 3分クッキング - Qiita](http://qiita.com/morisuke/items/ce04479c1b26d83f4fe3)
* [MacにGo言語の開発環境を構築する【準備編】 (direnv+go1.5Vendoring+glide) | フリップフラップ](http://blog.flup.jp/2016/02/16/dev_golang_keeping_vendoring/)
* [Go 1.6開発環境整備](http://akirachiku.com/2016/03/01/go16-development.html)
* [Mac上にGoの開発環境を構築する〜下準備編 | おそらくはそれさえも平凡な日々](http://www.songmu.jp/riji/entry/prepare-golang-development-environment-on-mac.html)
* [第1章　Go言語の特徴と環境構築―Googleが作った新言語：はじめてのGo―シンプルな言語仕様，型システム，並行処理｜gihyo.jp … 技術評論社](http://gihyo.jp/dev/feature/01/go_4beginners/0001)