Abhängigkeitsinjektion verwenden, um Argumente an Gin-Router-Handler zu übergeben
In Golang ist die Abhängigkeitsinjektion eine gängige Praxis zur Verwaltung von Abhängigkeiten in Webanwendungen . Mit dieser Technik können Sie Argumente an Handler übergeben, ohne globale Variablen zu verwenden oder die Funktionssignatur direkt zu ändern.
Abschlüsse verwenden
Ein Ansatz besteht darin, Abschlüsse zu verwenden, um Ihren Handler zu umschließen Funktion mit den gewünschten Abhängigkeiten. Ein Abschluss kapselt die Abhängigkeiten und ermöglicht deren Übergabe an den Handler bei Aufruf.
// 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)) }
Middleware verwenden
Middleware ist eine weitere Option zum Übergeben von Argumenten an Handler. Middleware-Funktionen werden vor dem eigentlichen Handler ausgeführt und können den Anforderungskontext ändern oder Abhängigkeiten einfügen.
// 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) }
Durch die Verwendung von Abhängigkeitsinjektionstechniken können Sie die Verschmutzung globaler Variablen vermeiden und eine saubere Codetrennung aufrechterhalten, während Sie Argumente effektiv an Gin übergeben Router-Handler.
Das obige ist der detaillierte Inhalt vonWie kann ich Abhängigkeiten in Gin-Router-Handler in Go einfügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!