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;
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)
}
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
Top comments (0)