y-ohgi's blog

しがないSREなフリーランスの徒然

Golang環境を整える

概要

Golangをはじめるためにローカルの環境を整える
いつもどおりDockerに固めちゃろって思ってたけど、 $ go get やら $GOPATH やらが面倒そうなのと最近 $ go get を要求されることが度々あるのでこの際ローカルに直接。

構築する環境

dotfilesの対象commit


Golangの入手

brewでも入るしこっちでも良い気がするけど、書くならバージョン変えたい欲求が出てくるだろうしバージョン管理ツールを導入する。
2つほどあるみたいだけどスター数の多いgvmを採用

gvmでgolangの導入

$ bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
$ gvm install go1.10.1 -B
$ gvm use go1.10.1 --default

-B はバイナリでインストールする指定。
バイナリじゃないとインストールのステップが増えたり、そもそもできなかったりした。

GOPATHなど

雑に ~/.go を指定。
コード書くようになったらディレクトリ構成の問題でghqを噛ませるなどしたほうが良さそうなので様子見。

spacemacsへgo layerの追加

最近emacsからspacemacsへ移行した。
これは別の記事で書こうと思うけど大きな理由としてlayer機能による設定の簡略化だ。
例えば言語の設定などはemacsの場合ベストプラクティスを探すところから始まるが、spacemacsの場合設定ファイルに一行 go とかくだけで終わる。最高。

まあ終わらないんですけどね。

.spacemacsの設定

.spacemacsを編集する前にまずgo layerが要求各種ツール群を導入する。

go get -u -v github.com/nsf/gocode
go get -u -v github.com/rogpeppe/godef
go get -u -v golang.org/x/tools/cmd/guru
go get -u -v golang.org/x/tools/cmd/gorename
go get -u -v golang.org/x/tools/cmd/goimports

補完もしたいので dotspacemacs-additional-packagesgo-autocomplete 追加。

最後にlayerの設定。

    dotspacemacs-configuration-layers
    '(
       ;; auto-completion ;; なければ追加
       go
       (go :variables
           go-autocomplete t
           go-use-gometalinter t
           go-tab-width 2
           gofmt-command "goimports")
      )

雑記

go-modeでhookやら変数やらを変えたかったもののずっとできなかった。
結論としてはemacsライクな(init.el内で書くような)構文じゃできず、 (go :variables) の間に変数を書く必要があった。
ここに盛大にハマってしい土日が飛ぶなど。
流石にデフォルトのタブ幅8 はきびしひ