十二月
9
土曜日

SpacemacsでGolang

Clojureの開発でCIDERが使いたくてSpacemacsに入門したのだが、それより前にGolangを書く必要が出てきたのでコードを書く環境を整える。


golang

インストール

brewでインストール。

brew install golang

GOPATH/binをパスに通す

$XDG_CONFIG_HOME/fish/conf.d/go.fish を作成。

set -x GOPATH $HOME/go
for p in $GOPATH
  set PATH $p/bin $PATH
end

Go Layer利用の準備

Go Layerが利用するコマンド群をインストール。

入力補完

https://github.com/nsf/gocode

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

シンボル定義の参照

https://github.com/rogpeppe/godef

go get -u -v github.com/rogpeppe/godef

コードのナビゲーション

https://godoc.org/golang.org/x/tools/cmd/guru

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

リネーム

https://godoc.org/golang.org/x/tools/cmd/gorename

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

importの削除と追加

https://godoc.org/golang.org/x/tools/cmd/goimports

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

Linter

https://github.com/alecthomas/gometalinter

go get -u -v github.com/alecthomas/gometalinter
gometalinter --install --update

Go Layerを有効化

$HOME/.spacemacs.d/init.eldotspacemacs/layers 関数内 dotspacemacs-configuration-layersリストに以下を追加。

auto-completion
syntax-checking
(go :variables
    go-use-gometalinter t
    gofmt-command "goimports"
    go-tab-width 4)

auto-completionsyntax-checking が有効になっていない場合は併せて有効化する。

SPC f e R で設定変更を反映。

ghqルートにGOPATHを追加

ghqでローカルリポジトリを管理する場合は、 go get したプロジェクトのソースもghq管理下となるようにする。
ghq.root$GOPATH/src を追加。

[ghq]
  root = ~/Sources
  root = ~/go/src

シンタックスチェック

Syntax Checking Layerを有効化する。

$HOME/.spacemacs.d/init.eldotspacemacs/layers 関数内 dotspacemacs-configuration-layersリストに以下を追加。

syntax-checking

Syntax Checking Layerではシンタックスチェックに Flycheck を利用している。

また Go Layerを有効化した際に go-use-gometalinter を真とした場合はflycheck-gometalinterにより gometalinter が利用される。

自動チェックのタイミング

デフォルトのFlycheckチェックのタイミングは

  • バッファの保存時
  • バッファに行が追加された時
  • 操作せずに所定の時間経過した時
  • Flycheck modeが有効下された時

のいずれかとなる。

今回シンタックスチェックは自動で掛けるのをやめ、手動でのみ実行する。

$HOME/.spacemacs.d/init.eldotspacemacs/user-configに以下設定を追加

(setq flycheck-check-syntax-automatically nil)

自動で掛けたい場合は、flycheck-check-syntax-automatically にトリガをリストで指定する。

トリガ 説明
save バッファ保存時
new-line バッファに行が追加された時
idle-change 操作せずに所定の時間経過した時
mode-enabled Flycheck modeが有効下された時
;; 例)モード有効時と保存時にシンタックスチェックを実施する。  
(setq flycheck-check-syntax-automatically '(mode-enabled save))

キーバインド

シンタックスチェックの有効 / 無効化
SPC t s
エラー一覧の表示 / 非表示

SPC e l

エラーをクリア

SPC e c

各種Flycheckのヘルプ

SPC e h

シンタックスチェックの実施

C-c ! c