Dans les applications Web simples GO qui utilisent des bases de données comme PostgreSQL, le calendrier de la fermeture de connexion de données devient une considération. Voici une plongée profonde dans quand et comment gérer cela dans des applications qui s'exécutent indéfiniment. func main () { Var Err Error db, err = sql.open ("postgres", "...") Si err! = Nil { log.fatalf ("ne pouvait pas se connecter à la base de données:% v", err) } http.handlefunc ("/ quoi que ce soit", quoi que ce soit) http.ListenandServe ("127.0.0.1:8080", nil) }
La question se pose: quand la méthode close () doit-elle être appelée sur la connexion DB?
Réponse:
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)
}
Option 1: clôture implicite
Le programme fermera la connexion de la base de données lorsqu'elle se termine, il n'est donc pas nécessaire d'appeler clôture () Explicit. Fermer
pour des applications plus complexes, envisagez d'utiliser un serveur gracieux, tel que github.com/grpc-ecosystem/go-grpc-middleware/Server, qui permet la fermeture de ressources différées et la fermeture de l'arrêt lors de la réception de signaux. Shutdown
Une autre approche consiste à attraper des signaux et à implémenter les mécanismes d'arrêt manuel. Ceci est utile pour le contrôle granulaire de la fermeture des ressources. Par exemple, un canal de clôture pourrait être utilisé pour informer les Goroutines pour publier des ressources avant que le programme ne sache. Le choix de l'approche appropriée garantit un nettoyage approprié et empêche les fuites de ressources.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3