en aplicaciones web simples Go que utilizan bases de datos como PostgreSQL, el momento del cierre de la conexión de la base de datos se convierte en una consideración. Aquí hay una inmersión profunda en cuándo y cómo manejar esto en aplicaciones que se ejecutan indefinidamente.
problema:
considere el siguiente código de aplicación web simplificado:
var db *sql.DB
func main() {
var err error
db, err = sql.Open("postgres", "...")
if err != nil {
log.Fatalf("Couldn't connect to the database: %v", err)
}
http.HandleFunc("/whatever", whateverHandler)
http.ListenAndServe("127.0.0.1:8080", nil)
}
La pregunta surge: ¿Cuándo debería llamarse el método cerrar () en la conexión db?
respuesta:
En este escenario específico, la conexión se cerrará automáticamente cuando el programa salga. Sin embargo, otras consideraciones pueden justificar el manejo manual.
opción 1: cierre implícito
El programa cerrará la conexión de base de datos cuando termine, por lo que no es necesario llamar a Cerrar () explícitamente.
[&] Opción 2: Graceful Servidor Aplicaciones más complejas, considere usar un servidor elegante, como github.com/grpc-ecosystem/go-grpc-middleware/server, que permite el cierre de recursos diferidos y el cierre limpio al recibir las señales.
opción 3: apagado manual
otro enfoque involucra el enfoque de captura y el mechón. Esto es útil para el control granular sobre el cierre de recursos. Por ejemplo, se podría utilizar un canal de cierre para notificar a Goroutines para liberar recursos antes de que salga del programa.
Conclusión:
basado en los requisitos y la complejidad de la aplicación específica, existen múltiples opciones para manejo de la conexión de la conexión de data en las aplicaciones web. Elegir el enfoque apropiado garantiza una limpieza adecuada y previene las fugas de recursos.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3