Desarrollo

Emacs y Go

Publicado el
Etiquetas: emacs golang bubblesort
Emacs y Go
Comparte

Go o Golang es un lenguaje de programación relativamente nuevo creado para ser simple y eficiente. Usado para escribir sistemas backend, tiene un conjunto avanzado de características y se enfoca en la velocidad y efectividad del programador. Go ha ganado mucha popularidad como un lenguaje de programación para crear aplicaciones web y sistemas para la nube, como PaaS, SaaS o IaaS.

Emacs, por otra parte, es un editor de texto muy reconocido, muy potente, pero también muy complicado de configurar. Algo tiene, que una vez que empiezas a usarlo, ya no lo puedes dejar.

El modo go-mode tiene un montón de funciones que facilitan programar en Go y además, la verdad, a veces el Copilot estorba un poco, sobre todo cuando los programas son sencillos.

Esta es mi configuración de Emacs para Go. Se suponía que todo iba dentro del use-package go-mode pero no funcionaba, así que el fly-check y el servidor lsp van fuera de la configuración principal.

(use-package flycheck
  :ensure t)

(use-package go-mode
  :ensure t
  :init
  (column-number-mode 1)
  (global-hl-line-mode 1)
  (global-whitespace-mode 1)
  (setq
   whitespace-style
   '(face
     trailing
     lines-tail
     space-before-tab
     space-after-tab
     newline
     indentation
     empty)
   whitespace-line-column 80
   company-idle-delay 0
   company-minimum-prefix-length 1)
  :mode "\\(\\.go\\|go.mod\\|go.sum\\)\\'"
  :hook (
         (go-mode . (lambda() (setq tab-width 4)))
         (before-save . gofmt-before-save)))

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

;; Go - lsp-mode
;; Set up before-save hooks to format buffer and add/delete imports.
(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)

;; Start LSP Mode and YASnippet mode
(add-hook 'go-mode-hook #'lsp-deferred)
(add-hook 'go-mode-hook #'yas-minor-mode)

Y se ve bien, la verdad:

Captura de pantalla de go-mode en Emacs

El programa es el algoritmo Bubble Sort, que me quedó muy padre.

package main

import "fmt"

func main() {
    var (
        numbers []int
        cap     int = 10
    )

    fmt.Printf("=== Write 10 integers ===\n")
    for i := 0; i < cap; i++ {
        var number int
        fmt.Printf("Integer #%d: ", i+1)
        fmt.Scanf("%d", &number)
        numbers = append(numbers, number)
    }

    fmt.Printf("Unordered slice\n")
    fmt.Printf("%v\n", numbers)

    bubbleSort(numbers)

    fmt.Printf("Ordered Slice\n")
    fmt.Printf("%v\n", numbers)
}

func swap(slice []int, index int) bool {
    slice[index+1], slice[index] = slice[index], slice[index+1]
    return true
}

func bubbleSort(data []int) {
    var (
        n      = len(data)
        sorted = false
    )

    for !sorted {
        swapped := false
        for i := 0; i < n-1; i++ {
            if data[i] > data[i+1] {
                swapped = swap(data, i)
            }
        }
        if !swapped {
            sorted = true
        }
        n = n - 1
    }
}
Javier Sanchez Toledano
Escrito por Javier Sanchez Toledano Sígueme

Soy Licenciado en Informática e Ingeniero en Sistemas Computacionales.
Soy auditor líder certificado por ICA en la Norma ISO 9000, desarrollo sistemas de gestión de la calidad con un enfoque de mejora continua, creo tableros de control con indicadores clave para mejorar la toma de decisiones basadas en datos.

Comentarios