Как настроить и работать с Go в Emacs?

Полное руководство по настройке Go и работе с проектами в Emacs

Настройка Emacs для работы с Go включает установку необходимых пакетов и настройку среды разработки. Вот пошаговая инструкция:

1. Установите go-mode (основной режим для Go)

Добавьте в ваш ~/.emacs или ~/.emacs.d/init.el:

(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
(package-initialize)

;; Установка go-mode (если не установлен)
(unless (package-installed-p 'go-mode)
  (package-refresh-contents)
  (package-install 'go-mode))

2. Установите lsp-mode (Language Server Protocol)

Для автодополнения, навигации и рефакторинга:

(unless (package-installed-p 'lsp-mode)
  (package-install 'lsp-mode))

(require 'lsp-mode)
(add-hook 'go-mode-hook #'lsp-deferred)  ;; Автоматический запуск LSP для Go

3. Установите lsp-ui (дополнения для LSP)

(unless (package-installed-p 'lsp-ui)
  (package-install 'lsp-ui))

(require 'lsp-ui)
(setq lsp-ui-doc-enable t)       ;; Включить документацию при наведении
(setq lsp-ui-sideline-enable t)   ;; Показывать информацию на полях

4. Установите company (автодополнение)

(unless (package-installed-p 'company)
  (package-install 'company))

(require 'company)
(add-hook 'go-mode-hook 'company-mode)
(setq company-minimum-prefix-length 1)
(setq company-idle-delay 0.1)

5. Установите flycheck (проверка синтаксиса)

(unless (package-installed-p 'flycheck)
  (package-install 'flycheck))

(require 'flycheck)
(add-hook 'go-mode-hook 'flycheck-mode)

6. Настройка gofmt (форматирование кода)

Добавьте в go-mode-hook:

(add-hook 'go-mode-hook
          (lambda ()
            (add-hook 'before-save-hook 'gofmt-before-save nil t)))

7. Установите goimports (автоматическое добавление импортов)

Убедитесь, что goimports установлен:

go install golang.org/x/tools/cmd/goimports@latest

Затем настройте в Emacs:

(setq gofmt-command "goimports")

8. Дополнительные улучшения (опционально)

  • dap-mode (отладка):
    (unless (package-installed-p 'dap-mode)
      (package-install 'dap-mode))
    (require 'dap-go)  ;; Поддержка Go
    
  • yasnippet (шаблоны кода):
    (unless (package-installed-p 'yasnippet)
      (package-install 'yasnippet))
    (yas-global-mode 1)
    

9. Проверьте настройки

Перезапустите Emacs и откройте .go файл. Должны работать:

  • Автодополнение (company)
  • Проверка ошибок (flycheck)
  • Форматирование при сохранении (gofmt/goimports)
  • Навигация по коду (lsp-mode)

Если LSP не работает, убедитесь, что у вас установлен Go Language Server (gopls):

go install golang.org/x/tools/gopls@latest

Готово! Теперь Emacs настроен для комфортной работы с Go. 🚀