WindowsでGolang開発環境構築

Golangインストール

インストーラー をダウンロードしてインストール(C:Go)

環境変数設定

以下の環境変数を追加

GOROOT

C:\Go

GOPATH

C:\Go\goprojects

PATH

%GOROOT%\bin;%GOPATH%\bin

GOROOTはGolangをインストールした場所、GOPATHはユーザーのワーキングディレクトリ(好きな場所で良い)を指定。

セットアップできたら動作確認をする。

$ go version
go version go1.6 windows/amd64

Vim設定

GolangはAtom, Eclipse, Emacs, Gedit, IntelliJ IDEA, LiteIDE, Notepad++, SublimeText, VisualStudio(Code)と様々なエディタ、IDEでサポートされていますが、ここではVimを使います。

インデントの設定

Golangはハードタブなのでvimrcに下記を設定 ~/.vim/after/ftplugin/<filetype>.vimに書くことでFileTypeごとの設定を記述できる.

" .vim/after/ftplugin/go.vim
set noexpandtab
set tabstop=4
set shiftwidth=4
set softtabstop=4

わざわざファイルを新しく用意するのが面倒という人はvimrcに以下のように書くといい。記述している内容は一緒だ。

" vimrc
autocmd FileType go         setl ts=4 sw=4 sts=4 noet

プラグイン導入

fatih/vim-go をお好みのPluginManagerでインストール(ここでは Shougo/dein.vim を使用)

" vimrcに記述する場合
call dein#add('fatih/vim-go', {'on_ft': 'go'})
# tomlに記述する場合
[[plugins]]
repo = 'fatih/vim-go'
on_ft = 'go'

コード補完やSyntaxHighlightを有効にするには下記をvimrcに記載するのをお忘れなく。

" vimrc
filetype plugin indent on
syntax on

設定ファイルに記述しプラグインをインストールしたら、vimのコマンドラインより下記のコマンドを叩く。

:GoInstallBinaries

2016-05-16時点でfatih/vim-goを導入すると下記がインストールされる。

  • asmfmt.exe

  • errcheck.exe

  • gocode.exe

  • godef.exe

  • gogetdoc.exe

  • goimports.exe

  • golint.exe

  • gometalinter.exe

  • gorename.exe

  • gotags.exe

  • guru.exe

  • impl.exe

  • motion.exe

  • oracle.exe

自分のvimrcをご覧になりたい方は こちら

Hello, Golang World!

プログラムを書いてみる。 コード補完(<C-x><C-o>)やリントツール、フォーマッタなど豊富なサポートが得られることが確認できる。

package main

import "fmt"

func main() {
    fmt.Printf("Hello, Golang world!\n")
}
$ go run hello.go
Hello, Golang world!

おまけ

よくag(the_silver_searcher)を使ってgrepを高速実行しようという記事が見受けられるが、ここではGolang製の mattn/jvgrep を使ってみる。 動作が高速でマルチエンコーディングに対応しており、Windowsでのインストールも簡単なので入れておいて損はない。

$ go get github.com/mattn/jvgrep
" vimrcに記述
if executable('jvgrep')
  set grepprg=jvgrep
endif

Shougo/unite.vim のgrep処理でもjvgrepを使用できるよう設定できるので、興味がある人は設定してみるといいかもしれない。

" vimrcに記述
if executable('jvgrep')
  let g:unite_source_grep_command = 'jvgrep'
  let g:unite_source_grep_default_opts = '-i --exclude ""\.(git|svn|hg|bzr)""'
  let g:unite_source_grep_recursive_opt = '-R'
endif