LoginSignup
24
20

More than 5 years have passed since last update.

emacsでGoの環境構築をやる

Posted at

遅刻しました 20日のアドベントカレンダーです。

Emacsを使ってたらカッコいいという理由で始めて
3年くらいつかってますが未だに使いこなせてないです。

一応参考

環境

OSX
Emacs 24
Go 1.5.2

Emacsは色々設定詰め込んで起動が重くなったのでemacs serverを立ち上げて
emacs clientで接続しています。
GoはHomeBrewでインストールしました。

環境変数にパスを通す

以下の様に環境変数を設定しています。

export GO15VENDOREXPERIMENT=1
export GOROOT=$(brew --prefix go)/libexec
export GOPATH=$HOME/work
export PATH=$PATH:$GOPATH/bin:$GOROOT/bin

GO15VENDOREXPERIMENTはコンパイルするためのGOPATHをリポジトリ内のvendorから探すようにできるオプションです。

パッケージのインストール

emacsにはpackage-installとかcaskとかel-getとか色々あるんですが
僕はel-getを使ってます。

el-getで初期化時に読み込んでるパッケージは以下です

(el-get-bundle! go-mode)
(el-get-bundle! go-autocomplete)
(el-get-bundle! go-eldoc)

それとemacsに環境変数を設定します。

(setenv "GOROOT" "/usr/local/opt/go/libexec")
(setenv "GOPATH" (concat (getenv "HOME") "/work"))

init.elの設定

(setenv "GOROOT" "/usr/local/opt/go/libexec")
(setenv "GOPATH" "/Users/kazu/work")

(add-hook 'go-mode-hook (lambda ()
                          (setq gofmt-command "goimports")
                          (add-hook 'before-save-hook 'gofmt-before-save)
                          (set (make-local-variable 'compile-command)
                               "go build -v && go test -v && go vet")
                          (local-set-key (kbd "M-.") 'godef-jump))
                          (go-eldoc-setup)
          )

gocode

gocodeは補完を提供してくれるツールです。
auto-completeと組み合わせることで関数などの補完をしてくれます。

インストール方法

$ go get github.com/nsf/gocode

スクリーンショット 2015-12-20 23.55.52.png

godoc

godocはコマンドラインからgoのドキュメントを閲覧できるようにしてくれます。
それをemacs内でも見れるようにgo-modeに設定が含まれています。

インストール方法

$ go get golang.org/x/tools/cmd/godoc

M-x godoc net/httpの結果

スクリーンショット 2015-12-21 0.03.13.png

go-eldoc

go-eldocは下に関数の引数や戻り値を表示してくれます。
便利です

http.Getにフォーカスがあると以下の様にメッセージにでます。

func(url string) (resp *http.Response, err error) [2 times]

goimports

Goでは使わないパッケージを読み込んでるとコンパイルができなくて
それはそれでいいんですが、試しながら書いてたり
使わないパッケージや使うために一々importを書きなおさなくてはいけなくてめんどくさいので
それを楽にしてくれるツールです。
自動でimportを加えたり消したりしてくれます。

インストール方法

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

init.elの設定

; gofmtをgoimportsに上書き
(setq gofmt-command "goimports")
; セーブした時にgofmtを実行する
(add-hook 'before-save-hook 'gofmt-before-save)

これでセーブした時に自動でimportを調整してくれます。
自分はauto-saveと組み合わせて手が止まったら常にセーブするようにしておくようにしています

goのinit.el

全体的なGoの設定

(setenv "GOROOT" "/usr/local/opt/go/libexec")
(setenv "GOPATH" (concat (getenv "HOME") "/work"))

(add-hook 'go-mode-hook (lambda ()
                          (setq gofmt-command "goimports")
                          (add-hook 'before-save-hook 'gofmt-before-save)
                          (set (make-local-variable 'compile-command)
                               "go build -v && go test -v && go vet")
                          (local-set-key (kbd "M-.") 'godef-jump))
                          (go-eldoc-setup)
          )

まとめ

全然 emacsを鍛えられてないのでもっと鍛えます。

参考

http://unknownplace.org/archives/golang-editing-with-emacs.html
http://tleyden.github.io/blog/2014/05/27/configure-emacs-as-a-go-editor-from-scratch-part-2/

24
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
20