gopls: официальный язык сервер для Go
#+begin_quote
go install golang.org/x/tools/gopls@latest
#+end_quote

goimports: инструмент для автоматического форматирования и управления импортами
#+begin_quote
go install golang.org/x/tools/cmd/goimports@latest
#+end_quote

#+begin_src emacs-lisp
;; Установка и настройка lsp-mode
(use-package lsp-mode
  :ensure t
  :commands (lsp lsp-deferred)
  :init
  (setq lsp-keymap-prefix "C-c l")
  :config
  (lsp-enable-which-key-integration t))

;; Установка lsp-ui для улучшенного интерфейса
(use-package lsp-ui
  :ensure t
  :commands lsp-ui-mode)

;; Установка company-mode для автодополнения
(use-package company
  :ensure t
  :config
  (setq company-minimum-prefix-length 1
        company-idle-delay 0.0)) ;; Опционально, для немедленного отображения

;; Настройка Go-mode
(use-package go-mode
  :ensure t
  :hook ((go-mode . lsp-deferred)
         (before-save . lsp-format-buffer) ;; Форматирование перед сохранением
         (before-save . lsp-organize-imports)))

;; Форматирование кода с использованием goimports
(setq gofmt-command "goimports")
(add-hook 'before-save-hook 'gofmt-before-save)

(add-hook 'go-mode-hook #'lsp-deferred)

;; Дополнительные настройки для LSP с Go
(setq lsp-go-use-gofumpt t) ;; Использовать gofumpt вместо gofmt
#+end_src
