Manejo de errores de base de datos:
Gestionar los errores de la base de datos en Go es fundamental para crear aplicaciones robustas y fiables. El paquete database/sql proporciona mecanismos para el manejo de errores que puedan producirse durante las operaciones con la base de datos.
Comprobaci贸n de errores en ejecuci贸n de consultas
Al ejecutar consultas u operaciones que interact煤en con la base de datos, comprobar siempre el error devuelto.
Ejemplo:
|
// Asumir que 'db' es una conexi贸n *sql.DB rows, err := db.Query("SELECT * FROM users") if err != nil { // Manejar error log.Fatal(err) } defer rows.Close() // Procesar las filas devueltas |
Manejo de errores con sentencias preparadas
Al utilizar sentencias preparadas, gestionar el error devuelto por la preparaci贸n de la sentencia y su ejecuci贸n.
Ejemplo:
|
// Asumir que 'db' es una conexi贸n *sql.DB stmt, err := db.Prepare("INSERT INTO users(name, age) VALUES(?, ?)") if err != nil { // Manejar error log.Fatal(err) } defer stmt.Close() // Ejecutar sentencia preparada con par谩metros _, err = stmt.Exec("Alice", 25) if err != nil { // Manejar error de ejecuci贸n log.Fatal(err) } |
Manejo de errores de transacci贸n
Durante las transacciones, asegurar gestionar los errores que puedan producirse en el proceso de confirmar o deshacer la transacci贸n.
Ejemplo:
|
// Asumir que 'tx' es un objeto de transacci贸n *sql.Tx err = tx.Commit() if err != nil { // Manejar error de confirmaci贸n ... // Revertir la transacci贸n si falla la confirmaci贸n if rbErr := tx.Rollback(); rbErr != nil { // Gestionar error de rollback si es necesario } log.Fatal(err) } |
Registro e informe de errores
Utilizar mecanismos de logging adecuados para registrar los errores. Puede ser registrarlos en consola, en archivo o en un servicio de registro, seg煤n las necesidades de la aplicaci贸n.
Ejemplo:
|
if err != nil { // Log error log.Println("Error:", err) // Manejar error en consecuencia } |
Envoltura de errores y contexto
Considerar usar paquetes como github.com/pkg/errors o el paquete de errores est谩ndar para a帽adir contexto a los errores. Esto ayuda a comprender mejor el contexto en el que se produjo el error.
Ejemplo:
|
import ( "github.com/pkg/errors" ) func fetchDataFromDB() error { // ... if err != nil { return errors.Wrap(err, "fetching data from database") } } |