No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Agregando otro Middleware

36/42
Recursos

Aportes 10

Preguntas 2

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

otro video mal editado, tenaz que esta clase de v铆deos se publiquen as铆 y no pasen por una revisi贸n.

Una funci贸n an贸nima es una funci贸n definida internamente dentro de un bloque de c贸digo, y que no tiene identificador o nombre. Este tipo de funciones no son reutilizables como paquetes, siendo utilizadas 煤nicamente dentro del bloque de c贸digo en el que son declaradas.

Material extra: http://territoriogo.blogspot.com/2018/11/funciones-anonimas-y-closures.html

Una forma que me ha ayudado a entender mejor a los middlewares es verlos como una cadena de responsabilidad. Por ejemplo en un fabrica de produccionde un auto, un middleware se encarga de poner la ruedas, otro las puertas, otro el motor y asi hasta armar el auto. lo importante aca es que cada middleware deber ser agnostico, es decir responsable de una sola cosa y solo de la suya, el que pone puertas no tienen porque saber de ruedas o motor, solo se encarga de que la puerte quede bien, en caso de que no pueda poner la puerta es porque el 鈥減roducto鈥 tiene un error y debe cortar la cadena. Espero se entienda y a alguien le sirva 馃槂

La palabra reservada defer designa una funci贸n a ejecutarse hasta el final de la ejecuci贸n del scope en el que se encuentre. Para utilizar defer no debe ser obligatorio con un closure.

log a diferencia de fmt puede imprimir la hora exacta en el que se llam贸. Esto tambi茅n se debe que aunque compartan nombres de funciones en sus paquetes, tienen responsabilidades diferentes. log es el paquete para loggear informaci贸n, mientras que fmt es para formatear.

Esa parte que se copi贸 y pego pudo haberse abstraido en otra funci贸n aparte que se encargue de hacer esa uni贸n entre la ejecuci贸n del middleware y lo que se obtiene del request.

Otra propiedad que usan los loggers son el methodo de la peticion. Podemos acceder con la propiedad de r *http.Request, la propiedad se llama Method.

Asi quedo mi logger.

Hola, me sale un error en middleware.go en la siguiente l铆nea:

return func(f http.HandlerFunc) http.HandlerFunc {

Este es el error:

cannot use func literal (type func(http.HandlerFunc) http.HandlerFunc) as type Middleware in return argument

Revis茅 mi c贸digo y est谩 igual que el repositorio de la clase. Mi versi贸n de Go es:
go version go1.14.5 darwin/amd64


func Loggin() Middleware {
	return func(f http.HandlerFunc) http.HandlerFunc {
		return func(w http.ResponseWriter, r *http.Request) {
			start := time.Now()

			// Defer una funcion anonima
			defer func() {
				log.Println(r.URL.Path, time.Since(start))
			}()
			f(w, r)
		}
	}
}

muy interesante el manejo de los middleware en Go.

Adjunto mi implementacion hasta el momento en la rama middleware.

Repositorio Github