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

- Установить сам сервер gopls:
go install golang.org/x/tools/gopls@latest
- Установить lsp-mode и lsp-ui одним из способов:
(use-package lsp-mode :ensure t)
(use-package lsp-ui :ensure t)
- Добавить настройки в
.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)
- Перейти в проект на go, и при необходимости сделать:
M-x lsp-restart-workspace
Отладка
https://github.com/skybert/skybert-talks/blob/main/emacs-go-setup/emacs-go.org