Tips and Tricks
Envolva um http.HandlerFunc com closure (contexto léxico)
As vezes você quer passar dados na inicialização de um http.HandlerFunc. Isto pode ser facilmente feito criando um closure
de http.HandlerFunc
:
func MyHandler(database *sql.DB) http.Handler {
return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
// agora, você tem acesso ao *sql.DB aqui
})
}
Usando gorilla/context
para requisição específica de dados
Com frequência precisamos armazenar e recuperar dados que são específicos da requisição HTTP atual. Use o gorilla/context
para mapear valores e recuperá-los mais tarde. Ele contém um mutex
(mutual exclusion, ou exclusão mútua na tradução livre) global do mapa de objetos requisitados.
func MyHandler(w http.ResponseWriter, r *http.Request) {
val := context.Get(r, "myKey")
// retorna ("bar", true)
val, ok := context.GetOk(r, "myKey")
// ...
}