Maison >développement back-end >Golang >Comment puis-je injecter des dépendances dans les gestionnaires de routeur Gin dans Go ?
Utilisation de l'injection de dépendances pour transmettre des arguments aux gestionnaires de routeurs Gin
Dans Golang, une pratique courante pour gérer les dépendances dans les applications Web consiste à utiliser l'injection de dépendances . Cette technique vous permet de transmettre des arguments aux gestionnaires sans utiliser de variables globales ni modifier directement la signature de la fonction.
Utiliser des fermetures
Une approche consiste à utiliser des fermetures pour envelopper votre gestionnaire fonctionner avec les dépendances souhaitées. Une fermeture encapsule les dépendances, leur permettant d'être transmises au gestionnaire lorsqu'elles sont invoquées.
// SomeHandler encapsulates the DB connection and returns a handler function func SomeHandler(db *sql.DB) gin.HandlerFunc { return func(c *gin.Context) { // Use the db connection within the handler rows, err := db.Query(...) if err != nil { c.JSON(http.StatusInternalServerError, err) return } c.JSON(http.StatusOK, rows) } } func main() { db, err := sql.Open(...) router := gin.Default() router.GET("/test", SomeHandler(db)) }
Utilisation du middleware
Le middleware est une autre option pour transmettre des arguments aux gestionnaires. Les fonctions middleware sont exécutées avant le gestionnaire réel et peuvent modifier le contexte de la requête ou injecter des dépendances.
// DBMiddleware injects the DB connection into the context func DBMiddleware(db *sql.DB) gin.HandlerFunc { return func(c *gin.Context) { c.Set("db", db) c.Next() } } func SomeHandler(c *gin.Context) { // Retrieve the DB connection from the context db := c.MustGet("db").(*sql.DB) // Use the db connection within the handler } func main() { db, err := sql.Open(...) router := gin.Default() router.Use(DBMiddleware(db)) router.GET("/test", SomeHandler) }
En utilisant des techniques d'injection de dépendances, vous pouvez éviter de polluer les variables globales et maintenir une séparation propre du code tout en transmettant efficacement les arguments à Gin. gestionnaires de routeurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!