Через lsp-mode сервер gopls поддерживает:

  • автодополенние через company
  • навигацию по коду, подменяя стандартный xref-find-definitions,
  • показ документации,
  • поиск ссылок на символ
  • переименование символов в проекте

Screenshot

  1. Установить сам сервер gopls:
go install golang.org/x/tools/gopls@latest
  1. Установить lsp-mode и lsp-ui одним из способов:
(use-package lsp-mode :ensure t)
(use-package lsp-ui :ensure t)
  1. Добавить настройки в .emacs для go:
(require 'lsp-mode)
(add-hook 'go-mode-hook #'lsp-deferred)

;; Set up before-save hooks to format buffer and add/delete imports.
;; Make sure you don't have other gofmt/goimports hooks enabled.
(defun lsp-go-install-save-hooks ()
  (add-hook 'before-save-hook #'lsp-format-buffer t t)
  (add-hook 'before-save-hook #'lsp-organize-imports t t))
(add-hook 'go-mode-hook #'lsp-go-install-save-hooks)
  1. Перейти в проект на go, и при необходимости сделать: M-x lsp-restart-workspace

Отладка

https://github.com/skybert/skybert-talks/blob/main/emacs-go-setup/emacs-go.org