DEV Community

Cover image for Deja de escribir código SQL dentro de código Go, ¡la solución está aquí!
midir99
midir99

Posted on

Deja de escribir código SQL dentro de código Go, ¡la solución está aquí!

Estás escribiendo Go pero necesitas escribir un poco de SQL, por lo que terminas escribiendo código SQL dentro de tu código fuente Go, esto no es un problema mientras sean consultas cortas, pero cuando tus consultas ocupan más líneas de código éstas se vuelven difíciles de leer y de modificar, además la falta de indentación y coloreado del código lo hacen peor.

Entonces... ¿Cuál es la solución?

Mantén tu código SQL como SQL y tu código Go como Go (no escribas SQL dentro de Go).

¡Para esto puedes usar sqload!

Archivo users.sql

-- query: FindUserById
SELECT first_name,
       last_name,
       dob,
       email
  FROM user
 WHERE id = :id;

-- query: UpdateFirstNameById
UPDATE user
   SET first_name = :first_name
 WHERE id = :id;

-- query: DeleteUserById
DELETE FROM user WHERE id = :id;
Enter fullscreen mode Exit fullscreen mode

Archivo main.go

package main

import (
    _ "embed"
    "fmt"

    "github.com/midir99/sqload"
)

//go:embed users.sql
var sqlCode string

var Q = sqload.MustLoadFromString[struct {
    FindUserById        string `query:"FindUserById"`
    UpdateFirstNameById string `query:"UpdateFirstNameById"`
    DeleteUserById      string `query:"DeleteUserById"`
}](sqlCode)

func main() {
    fmt.Printf("- FindUserById\n%s\n\n", Q.FindUserById)
    fmt.Printf("- UpdateFirstNameById\n%s\n\n", Q.UpdateFirstNameById)
    fmt.Printf("- DeleteUserById\n%s\n\n", Q.DeleteUserById)
}
Enter fullscreen mode Exit fullscreen mode

Manteniendo tu SQL y Go separados obtienes las siguientes ventajas:

  • Mejor soporte por parte de tu IDE o editor de código (porque ahora estás manejando código SQL en su propio archivo con su extensión .sql).
  • Tu DBA podrá encontrar fácilmente el código de cada consulta que tu proyecto está corriendo.
  • Reúso de SQL, simplemente copia los mismos archivos .sql de un proyecto a otro.
  • Mantén tu código Go libre de consultas SQL.

sqload es una librería con 100% de test coverage, libre de dependencias
de terceros y su documentación cuenta con muchos ejemplos.

sqload está inspirada en Yesql (Clojure).

https://github.com/midir99/sqload
https://pkg.go.dev/github.com/midir99/sqload

Latest comments (0)