DEV Community

Yoandy Rodriguez Martinez
Yoandy Rodriguez Martinez

Posted on • Originally published at yorodm.github.io on

3 1

Emacs + Golang. Edición 2019

Go 1.12 fue lanzado hace un mes y entre los cambios más significativos se encuentran varias mejoras en el soporte para módulos (que va a ser el método por defecto en la versión 1.13).

Si eres usuario de Emacs y te interesa desarrollar utilizando Go, aquí tienes una guía sencilla de como habilitar el soporte para el lenguaje.

Paso 1. Language server protocol

Si tienes una versión actualizada de lsp-mode ya tienes soporte para bingo, una herramienta que provee un servidor de lenguajes para Go y que tiene soporte integrado para trabajar con módulos

(use-package lsp-mode
  :commands (lsp)
  :config
  (use-package company-lsp
    :config
    (add-to-list 'company-backends 'company-lsp)))

(use-package lsp-ui
  :hook (lsp-mode . lsp-ui-mode)
  :config
  (define-key lsp-ui-mode-map
    [remap xref-find-definitions] #'lsp-ui-peek-find-definitions)
  (define-key lsp-ui-mode-map
    [remap xref-find-references] #'lsp-ui-peek-find-references)
  (setq lsp-ui-sideline-enable nil
        lsp-ui-doc-enable t
        lsp-ui-flycheck-enable nil
        lsp-ui-imenu-enable t
        lsp-ui-sideline-ignore-duplicate t))
Enter fullscreen mode Exit fullscreen mode

Paso 2. Go mode y utilidades

Como lsp-mode es un minor mode necesitamos el soporte para el lenguaje (font-lock entre otras cosas). Los pasos necesarios son:

  1. Instalar goimports
  2. Instalar golint o gofmt.
(use-package flycheck)
(use-package go-mode
  :config
  ; Use goimports instead of go-fmt
  (setq gofmt-command "goimports")
  (flycheck-mode)
  (add-hook 'go-mode-hook 'company-mode)
  ;; Call Gofmt before saving
  (add-hook 'before-save-hook 'gofmt-before-save)
  (add-hook 'go-mode-hook #'lsp)
  (add-hook 'go-mode-hook #'flycheck-mode)
  (add-hook 'go-mode-hook '(lambda ()
                 (local-set-key (kbd "C-c C-r") 'go-remove-unused-imports)))
  (add-hook 'go-mode-hook '(lambda ()
                 (local-set-key (kbd "C-c C-g") 'go-goto-imports)))
  (add-hook 'go-mode-hook (lambda ()
                (set (make-local-variable 'company-backends) '(company-go))
                (company-mode))))
Enter fullscreen mode Exit fullscreen mode

Paso 3. Comenzar a programar en Go.

Con la configuración anterior puedes empezar a programar en Go

  1. Completamiento y referencias cruzadas
  2. Revisión de código mientras escribes.
  3. Formato automático al salvar.
  4. Un efecto aprecido al hover de ese editor taaan popular

Paso 4. Compilar y debug.

Puedes configurar el comando de compilación por defecto que utilizas cuando editas archivos Go.

;; Adicionar en la sección :config de `go-mode`
(add-hook 'go-mode-hook #'setup-go-mode-compile)

;; adicionar en el mismo archivo

(defun setup-go-mode-compile ()
  ; Customize compile command to run go build
  (if (not (string-match "go" compile-command))
      (set (make-local-variable 'compile-command)
           "go build -v && go test -v && go vet")))
Enter fullscreen mode Exit fullscreen mode

Si prefieres los debuggers interactivos debes instalar delve y añadir la siguiente línea en tu archivo de inicio de Emacs.

(use-package go-dlv)
Enter fullscreen mode Exit fullscreen mode

Los comandos dlv y dlv-current-func son los puntos de entrada al debugger.

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay