依存関係の注入を使用して、Gin ルーター ハンドラーに引数を渡す
Golang では、Web アプリケーションの依存関係を管理するための一般的な方法は、依存関係の注入を使用することです。 。この手法を使用すると、グローバル変数を使用したり、関数シグネチャを直接変更したりせずに、ハンドラーに引数を渡すことができます。
クロージャーの使用
1 つの方法は、クロージャーを使用してハンドラーをラップすることです。必要な依存関係を持つ関数。クロージャーは依存関係をカプセル化し、呼び出し時に依存関係をハンドラーに渡せるようにします。
// 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)) }
ミドルウェアの使用
ミドルウェアは、ハンドラーに引数を渡すためのもう 1 つのオプションです。ミドルウェア関数は実際のハンドラーの前に実行され、リクエスト コンテキストを変更したり、依存関係を挿入したりできます。
// 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) }
依存関係注入テクニックを利用することで、グローバル変数の汚染を回避し、Gin に引数を効果的に渡しながらクリーンなコード分離を維持できます。ルーターハンドラー
以上がGo の Jin Router ハンドラーに依存関係を注入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。