요청 처리기에 인수 전달
Gorilla Mux를 사용할 때 많은 개발자는 인수를 처리기에 직접 전달하는 데 한계가 있습니다. HandleFunc 메서드는 클로저를 두 번째 매개변수로만 허용하므로 핸들러에 전달할 수 있는 매개변수의 수가 제한됩니다.
전역적으로 접근 가능한 데이터베이스 객체
한 가지 공통점 해결책은 전역적으로 액세스 가능한 데이터베이스 개체를 사용하는 것입니다. 이 접근 방식은 종종 허용되지만 일부 개발자는 유지 관리 가능성 및 테스트 가능성 문제와 같은 다양한 이유로 전역 변수를 피하는 것을 선호합니다.
미들웨어
미들웨어는 다음을 허용하는 메커니즘입니다. 개발자는 요청이 핸들러에 도달하기 전에 가로채서 처리합니다. 가능한 해결 방법은 요청 컨텍스트에 데이터베이스 개체를 추가하는 미들웨어 기능을 만드는 것입니다. 그런 다음 이 미들웨어를 사용하여 데이터베이스를 핸들러에 삽입할 수 있습니다.
예:
package main import ( "fmt" "net/http" "github.com/gorilla/mux" "gorm.io/gorm" ) func main() { db := createDB() mux := mux.NewRouter() mux.Use(func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Add the database object to the request context r.Context() = context.WithValue(r.Context(), "db", db) // Pass the request to the next handler next.ServeHTTP(w, r) }) }) mux.HandleFunc("/users/{id}", showUserHandler).Methods("GET") } func showUserHandler(w http.ResponseWriter, r *http.Request) { // Retrieve the database object from the request context db := r.Context().Value("db").(*gorm.DB) fmt.Fprintf(w, "We should fetch the user with id %s", mux.Vars(r)["id"]) }
래퍼 함수
또 다른 해결 방법은 다음과 같습니다. 추가 매개변수를 허용하는 래퍼 함수를 만듭니다. 예를 들면 다음과 같습니다.
db := createDB() mux := mux.NewRouter() mux.HandleFunc("/users/{id}", func(w http.ResponseWriter, r *http.Request) { showUserHandler(w, r, db) }).Methods("GET")
결론
미들웨어 사용 및 래퍼 기능 생성을 포함하여 Gorilla Mux의 요청 처리기에 인수를 전달하는 방법에는 여러 가지가 있습니다. 최선의 접근 방식은 개발자의 특정 요구 사항과 선호도에 따라 달라집니다.
위 내용은 Gorilla Mux의 요청 처리기에 인수를 어떻게 전달할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!