概要
Emacsでの Go言語をプログラミングする際の環境構築について示す.
事前準備
コード補完のために gocode
, 定義元へのジャンプのために godef
をインストールしておく
% go get -u github.com/stamblerre/gocode
% go get -u github.com/rogpeppe/godef
推奨パッケージ
これらのパッケージはすべて MELPAからインストールできる
go-modeの各種コマンド(利用頻度が高いもの)
go-import-add (Default: C-c C-a
)
指定したパッケージの import文を追加する.
godef-jump (Default: C-c C-j
)
関数, インタフェース, 変数等の定義元にジャンプする. コードリーティング等,
コードの流れを把握したいときに非常に有用となる. godef
コマンドが必要に
なるので, 事前にインストールしておく. M-,
で元の場所に戻れる.
MEMO
M-.
に bindすると, 他のモードと同じになって, 使いやすいかもしれない.
godef-describe(Default: C-c C-d
)
後述の go-eldoc
を使うことで, 自動的に情報を表示できる.
gofmt
gofmt
コマンドを現在のバッファに適用する.
保存時自動的にこのコマンドを実行したい場合は 以下のように gofmt-before-save
を保存のための
hookに登録すればよい.
(add-hook 'before-save-hook 'gofmt-before-save).
go-autocomplete
gocodeを利用した autocompleteの Go拡張. 高速であり, 精度の高い補完能力を持つ.
company-go
gocodeの company backend
引数スニペットの挿入
go-autocomplete
, company-go
共にデフォルトで関数名を補完した際, 引数のスニペットが挿入される. 無効にする場合は, auto-completeでは ac-go-expand-arguments-into-snippets
, company-modeでは company-go-insert-arguments
を無効にする.
(custom-set-variables
'(ac-go-expand-arguments-into-snippets nil) ; auto-complete
'(company-go-insert-arguments nil)) ; company-mode
go-eldoc
Go用の eldoc
. カーソル下の関数のシグネチャ, typeされた型の情報を minibufferに表示する.
その他パッケージ
flycheck
flycheckは Goが標準でサポートしている.
flymake-go
Go用 flymake
go-errcheck
compilation
インタフェースでエラーを指摘するツール. next-error
コマンドなどで
エラー箇所に移動できる. Goは指摘されるエラーが多いので, flymakeの類だと, 頻繁に
エラーが指摘されてしまう. 一気にコードを書きって後でエラーをまとめて修正したい
というような方はこちらのパッケージの方が良いと思われる.
go-direx
direx
を使った Goのツリービューア
helm-tips
(defvar my/helm-go-source
'((name . "Helm Go")
(candidates . (lambda ()
(cons "builtin" (go-packages))))
(action . (("Show document" . godoc)
("Import package" . my/helm-go-import-add)))))
(defun my/helm-go-import-add (candidate)
(dolist (package (helm-marked-candidates))
(go-import-add current-prefix-arg package)))
(defun my/helm-go ()
(interactive)
(helm :sources '(my/helm-go-source) :buffer "*helm go*"))
Screenshot
設定例
(with-eval-after-load 'go-mode
;; auto-complete
(require 'go-autocomplete)
;; company-mode
(add-to-list 'company-backends 'company-go)
;; eldoc
(add-hook 'go-mode-hook 'go-eldoc-setup)
;; key bindings
(define-key go-mode-map (kbd "M-.") 'godef-jump)
(define-key go-mode-map (kbd "M-,") 'pop-tag-mark))