Gin で RESTful API を構築する場合、特に共通の共有のために引数をルーター ハンドラーに渡すことが不可欠になります。データベース接続などのリソース。グローバル変数に引数を格納するのは簡単そうに見えますが、より良いオプションが利用可能です。
推奨される方法は、クロージャを使用して依存関係を明示的に渡すことです。ハンドラー コードをクロージャーにカプセル化することで、Gin の HandlerFunc インターフェイスを満たす関数を返すことができます。
// SomeHandler returns a gin.HandlerFunc to satisfy Gin's router methods. func SomeHandler(db *sql.DB) gin.HandlerFunc { fn := func(c *gin.Context) { // Handler code goes here. For example: rows, err := db.Query(...) c.String(200, results) } return gin.HandlerFunc(fn) } func main() { db, err := sql.Open(...) // Handle error router := gin.Default() router.GET("/test", SomeHandler(db)) router.Run(":8080") }
このアプローチにより、関心の分離を維持しながらデータベース接続を明示的にハンドラー関数に渡すことができます。
小規模プロジェクトにとってグローバル変数は魅力的に見えるかもしれませんが、一般的には落胆した。コードが密結合になり、アプリケーションの保守とテストが困難になる可能性があります。グローバル変数を使用する場合は、依存関係が明確かつ適切に構造化された方法でカプセル化されていることを確認してください。
Go は、オプションの関数引数をネイティブにサポートしません。ただし、関数から関数を返すなどの関数プログラミング手法を使用して、同様の機能を実現できます。このアプローチにより、柔軟性とコードの再利用が可能になります。
以上が引数をジンルーターハンドラーに効果的に渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。