Como passo argumentos para meu manipulador

Estou tentando passar meu objeto de banco de dados para meus manipuladores, em vez de ter um objeto global. Mas não sei se isso é possível, estou usando o pacote Gorilla Mux e posso ver que é necessário fechar como um segundo parâmetro.

// https://github.com/gorilla/mux/blob/master/mux.go#L174
// HandleFunc registers a new route with a matcher for the URL path.
// See Route.Path() and Route.HandlerFunc().
func (r *Router) HandleFunc(path string, f func(http.ResponseWriter,
    *http.Request)) *Route {
    return r.NewRoute().Path(path).HandlerFunc(f)
}

Que, em seguida, define os parâmetros que posso usar, idealmente, gostaria de ter um terceiro parâmetro como este.

// In my main
router.HandleFunc("/users/{id}", showUserHandler).Methods("GET")

func showUserHandler(w http.ResponseWriter, r *http.Request, db *gorm.DB) {
    fmt.Fprintf(w, "We should fetch the user with id %s", vars["id"])
}

Existe uma solução alternativa? Ou preciso de um objeto db global? Sou novo no Go, por isso, explique uma resposta potencial em detalhes.

questionAnswers(1)

yourAnswerToTheQuestion