# Go в GNU Emacs
Difrex(mobile)(tavern,23) — All
2018-07-30 07:40:47


На самом деле это выжимка вот этой статьи. Ну, а еще некоторые вещи в ней устарели, по-этому немного обновленная версия.

# tl;dr

Поставим нужные пакеты в Емакс


(use-package exec-path-from-shell)
(use-package rainbow-delimiters)
(use-package go-snippets)
(use-package go-guru)
(use-package go-autocomplete)


Настроим go-mode


(use-package go-mode
;; Godef jump key binding
:bind (("M-." . godef-jump)
("M-*" . pop-tag-mark))
:init
(setenv "GOPATH" (concat (getenv "HOME") "/.local"))
:config
(defun set-exec-path-from-shell-PATH ()
(let ((path-from-shell (replace-regexp-in-string
"[ \t\n]*$"
""
(shell-command-to-string "/bin/bash -c '. ~/.bashrc && echo $PATH'"))))
(setenv "PATH" path-from-shell)
;; (setq eshell-path-env path-from-shell) ; for eshell users
(setq exec-path (split-string path-from-shell path-separator))))

(when window-system (set-exec-path-from-shell-PATH))

(defun my-go-mode-hook ()
"My Golang hook."
(setq gofmt-command "goimports")

;; Call Gofmt before saving
(add-hook 'before-save-hook 'gofmt-before-save)

;; Set compile command
(if (not (string-match "go" compile-command))
(set (make-local-variable 'compile-command)
"go build -v && go test -v && go vet"))

;; Enable rainbow
(rainbow-delimiters-mode-enable)
(auto-complete-for-go)
(yas-initialize))

;; Go autocomplete
(defun auto-complete-for-go ()
"Enable golang autocomple."
(auto-complete-mode 1))

(add-hook 'go-mode-hook 'auto-complete-for-go)
(add-hook 'completion-at-point-functions 'go-complete-at-point)
(add-hook 'go-mode-hook 'my-go-mode-hook)
(add-hook 'go-mode-hook #'rainbow-delimiters-mode))


Тут в :bind можно прописать свои сочетания клавиш.

Да, всегда используйте use-package. Это сэкономит кучу времени в будущем.

Теперь добавим GOPATH в ~/.bashrc


echo 'export GOPATH=${HOME}/.local' >> ~/.bashrc
. ~/.bashrc


Выкачиваем зависимости Go


go get -t -v golang.org/x/tools/cmd/goimports
go get -t -v golang.org/x/tools/cmd/guru
go get -t -v github.com/rogpeppe/godef


Готово. Код конфига доступен по ссылке.

Ссылка: https://difrex.lessmore.pw/post/go-v-emacs/