Heim > Backend-Entwicklung > Golang > Wie kann ich Abhängigkeiten in Gin-Router-Handler in Go einfügen?

Wie kann ich Abhängigkeiten in Gin-Router-Handler in Go einfügen?

Susan Sarandon
Freigeben: 2024-12-11 07:59:10
Original
209 Leute haben es durchsucht

How Can I Inject Dependencies into Gin Router Handlers in Go?

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))
}
Nach dem Login kopieren

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)
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage