以前書いた内容が古くなったので改めて書き直すことにしました。
大きな変更点としては補完に gocode
ではなく gopls (Language Server)
を使うようにしたことです。
Go のインストール
1
2
3
4
5
6
7
8
|
$ mkdir $HOME/.go
# Add this line to ~/.zshrc
export GOPATH=$HOME/.go
export PATH=$PATH:$GOPATH/bin
# Install
brew install go
|
Go Package のインストール
まずは gopls (Language Server)
とその他をインストールします。
goimports
は import
の過不足を自動で補完してくれるものです。好みでインストールしてください。
1
2
3
|
$ go get golang.org/x/tools/gopls@latest # Language Server
$ go get -v github.com/uudashr/gopkgs/cmd/gopkgs # Go パッケージ
$ go install golang.org/x/tools/cmd/goimports@latest # import の過不足を自動で補完
|
Go Package のアップデート
Emacs Go Package のインストール
次に Emacs 関連のパッケージをインストールします。
一番コアとなるのは lsp-mode ですね。
lsp-ui はドキュメントのリファレンスなどを表示するもので company-lsp はコード補完のバックエンドとして company を使うためのパッケージです。
1
2
3
|
(use-package lsp-mode)
(use-package lsp-ui)
(use-package company-lsp)
|
ついでに lsp 関連の設定も書いておきます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
;; lsp-mode keybinds
(defun lsp-mode-init ()
(lsp)
(global-set-key (kbd "M-*") 'xref-pop-marker-stack)
(global-set-key (kbd "M-.") 'xref-find-definitions)
(global-set-key (kbd "M-/") 'xref-find-references))
;; lsp-ui config
(setq lsp-ui-doc-enable t)
(setq lsp-ui-doc-header t)
(setq lsp-ui-doc-include-signature t)
(setq lsp-ui-doc-max-width 150)
(setq lsp-ui-doc-max-height 30)
(setq lsp-ui-peek-enable t)
(add-hook 'lsp-mode-hook 'lsp-ui-mode)
|
go-mode パッケージをインストールしておきます。
Elisp の設定
go-mode に lsp を hook するだけでいい感じに使えます。
1
|
(add-hook 'go-mode-hook #'lsp)
|
lsp-mode は最初に Go ファイルを開くと workspace を聞いてきます。
インポートすると .emacs.d/
に .lsp-session-v1
というテキストファイルが作られます。
その他 goimports
と compile option の追加を行いました。
M-x compile
もしくは C-c c
でビルドが走ります。
なお goimports
は go fmt
も自動で行ってくれます。
1
2
3
4
5
6
7
8
9
10
|
(defun go-mode-omnibus ()
;; Go code formatting by goimports
(setq gofmt-command "goimports")
(add-hook 'before-save-hook 'gofmt-before-save)
;; Customize compile command to run go build
(if (not (string-match "go" compile-command))
(set (make-local-variable 'compile-command)
"go build -v && go test -v && go vet"))
)
(add-hook 'go-mode-hook 'go-mode-omnibus)
|
便利な Tips
go-mode
でよく使う便利な Tips です。
定義元ジャンプ
M-.
で定義元にジャンプできます。M-,
で戻ることができます。
godoc
M-x godoc
でドキュメントが引けます。
VSCode からインストールされたパッケージ群
余談ですが VSCode で Go の環境を整えて Go ファイルのあるディレクトリを開くと、いくつかパッケージのインストールを勧められます。
そこで Install All
すると2021年10月現在以下のパッケージが入りました。デフォルトで入るパッケージなので入れておくと吉かもしれません。
1
2
3
4
5
6
7
8
9
10
|
gopkgs
go-outline
gotests
gomodifytags
impl
goplay
dlv
dlv-dap
staticcheck
gopls
|