- 기본적인 신택스 하일라이팅
- 코드 포매팅 (저장시에 gofmt 실행)
- Go to definition 점프
- 실시간 linting
- 자동완성
- 심볼 하일라이팅
go-mode 신택스 하일라이팅 + 코드 포매팅
go-mode를 깔면 됩니다. 패키지를 깔기 위해서 .emacs 파일에 다음 구절이 포함되어야 합니다.
(require 'package)
(add-to-list 'package-archives
'("melpa" . "https://melpa.org/packages/"))
go-mode를 설치합니다. 설치한 후 저장시에 자동으로 gofmt가 설정되도록 go-mode-hook에 다음과 같은 내용을 포함되도록 합니다.
(defun isr-go-mode-hook ()
...
;; Call Gofmt before saving
(add-hook 'before-save-hook 'gofmt-before-save)
...
(add-hook 'go-mode-hook 'isr-go-mode-hook)
문서 마지막에 isr-go-mode-hook 전체가 드러나는 예제가 있습니다. 여기서 조각조각 COPY&PASTE 하느라 고생할 필요는 없습니다.
Go to definition 점프, 심볼 하일라이팅, rename
한동안 정의/선언 지점으로 점프하는 백엔드 툴로 godef가 인기 있었습니다. 그러나 지금은 훨씬 강력한 기능을 많이 가진 go-guru에서도 이 기능을 제공하므로 godef를 굳이 깔아야 할 이유는 없다고 생각합니다. 아래는 go-guru로 정의/선언지점으로 점프하는 기능을 설정하는 방법입니다.
go get 으로 go-guru를 설치합니다. 하는 김에 다른 유용한 툴도 설치합니다.
go get -u golang.org/x/tools/cmd/...
emacs에서 go-guru, go-rename 패키지를 설치합니다. 다음의 단축기 설정을 .emacs 파일에 추가합니다. Alt+'.'로 이동, Alt+Shift+*로 되돌아오기입니다. 문서 마지막에 .emacs 파일 전체를 실을 것이므로 여기까지 읽고 따라할 필요는 없습니다.
(defun isr-go-mode-hook ()
...
;; Godef jump key binding
(local-set-key (kbd "M-.") 'go-guru-definition)
(local-set-key (kbd "M-*") 'pop-tag-mark))
;; highlight identifiers
(go-guru-hl-identifier-mode))
...
(add-hook 'go-mode-hook 'isr-go-mode-hook)
flycheck (실시간 문법 체크)
golangci-lint 를 설치합니다.
go get -u github.com/golangci/golangci-lint/cmd/golangci-lint
(defun isr-go-mode-hook ()
...
;; flycheck
(flycheck-mode)
...
(add-hook 'go-mode-hook 'isr-go-mode-hook)
compnay-go (자동완성 기능)
백엔드로 gocode를 사용하므로 설치합니다.
go get -u github.com/nsf/gocode
이맥스에서 package-install로 company-go 플러그인을 설치합니다. .emacs에 추가합니다.
(defun isr-go-mode-hook ()
...
(require 'company)
(require 'company-go)
(set (make-local-variable 'company-backends) '(company-go))
(company-mode)
...
(add-hook 'go-mode-hook 'isr-go-mode-hook)
전체 .emacs 파일을 모으면 다음과 같습니다.
(require 'package)
(add-to-list 'package-archives
'("melpa" . "https://www.melpa.org/packages/"))
(defun isr-go-mode-hook ()
;; flycheck
(flycheck-mode)
;; Call Gofmt before saving
(add-hook 'before-save-hook 'gofmt-before-save)
;; Godef jump key binding
(local-set-key (kbd "M-.") 'go-guru-definition)
(local-set-key (kbd "M-*") 'pop-tag-mark)
;; company-go
(require 'company)
(require 'company-go)
(set (make-local-variable 'company-backends) '(company-go))
(company-mode)
;; highlight identifiers
(go-guru-hl-identifier-mode))
(add-hook 'go-mode-hook 'isr-go-mode-hook)