Construyendo aplicaciones Web con Go

Consejos y trucos

Envuelve un http.HandlerFunc en un cierre.

A veces, al iniciar quieres pasar datos a un http.HandlerFunc. Esto se puede hacer fácilmente mediante la creación de un cierre de la http.HandlerFunc:

func MiControlador(basededatos *sql.DB) http.Handler {
   return http.HandlerFunc(func (rw http.ResponseWriter, r *http.Request) {
     // ahora, aquí tienes acceso a *sql.DB
  })
}

Utilizando gorila / contexto para datos de una petición específica

Es bastante frecuente que necesitemos almacenar y recuperar datos que son específicos a la petición HTTP actual. Utiliza gorila / contexto para asignar valores y recuperarlos más tarde. Contiene un mutex global sobre un mapa del objeto petición.

func MiControlador(w http.ResponseWriter, r *http.Request) {
    valor: = context.Get(r, "miClave")

    // devuelve ("bar", true) 
    valor, bien: = context.GetOk(r, "miClave")
     // ...
}