Gorilla Mux では、デフォルトでハンドラーは http.ResponseWriter と *http.Request のみを受け取ります。ただし、データベース接続オブジェクトなど、追加の引数をハンドラーに渡す必要があるシナリオもあります。
これを実現する 1 つの方法は次のとおりです。追加データを保持し、http.HandlerFunc インターフェイスを実装するカスタム タイプを定義します。
type UserHandler struct { db *gorm.DB } func (h UserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { // here you can use db } // usage: db := createDB() users := UserHandler{db: db} router.HandleFunc("/users/{id}", users.ServeHTTP)
別のオプションは、クロージャ関数を使用して実際のデータをラップすることです。
func showUserHandler(db *gorm.DB) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { // here you can use db } } // usage: db := createDB() router.HandleFunc("/users/{id}", showUserHandler(db))
特定のシナリオでは、特にデータベース接続などの共有リソースの場合、グローバル変数の使用が許容される場合があります。ただし、それらを慎重に使用し、潜在的な欠点を理解することが重要です。
var db *gorm.DB = createDB() func showUserHandler(w http.ResponseWriter, r *http.Request) { // here you can use db } // usage: router.HandleFunc("/users/{id}", showUserHandler)
以上がGorilla Mux のハンドラー関数に追加の引数を渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。