No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Agregando otro Middleware

36/42
Recursos

Aportes 11

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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 “producto” tiene un error y debe cortar la cadena. Espero se entienda y a alguien le sirva 😃

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.

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.

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