¿En que momento se agrego la función AddMiddleware?
Introducción a Go
Mi primer programa en Go
Instalación en Mac y Windows
Instalar VS Code
Comandos básicos de Go
Analizando un programa en Go
Nuestra Primera Aplicación Go
Descripción del proyecto 1: Calculadora
Leer inputs desde la consola
Manejo de errores y uso de If
Switch
Lista de Tareas
Structs y Receivers
Descripción del proyecto 2: Lista de Tareas
Structs para Lista de Tareas
Punteros
Punteros en Structs
Uso de Slices
Ciclo For
Implementar For en Struct
Interfaces
¿Qué es una interfaz?
Maps
¿Por qué las Interfaces?
Creando la Interfaz Animal
Imprimiendo el contenido de una Página Web usando Interfaces
Goroutines y Channels
Introducción al problema de la Concurrencia
GoRoutines
Channels
Implementación de Goroutines y channels
Construyendo un Servidor Web
Ciclos While y For
Descripción de Servidor Web
Creando el Servidor
Manejando rutas en backend
¿Qué es un Middleware?
Manejando Request HTTP
Asignando Rutas HTTP
Agregando Middlewares
Agregando Multiples Middlewares
Agregando otro Middleware
Manejando POST
Manejando Modelos y JSON
Respondiendo Request JSON
Go Modules creando nuestro primer módulo en Go
Implementando nuestro primer módulo en Go
Conclusiones del Curso y siguientes pasos
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
El profesor menciona la función AddMidleware, aquí te la dejamos.
func AddMidleware( f http.HandlerFunc,
middlewares ...Middleware)
http.HandlerFunc {
for _, m := range middlewares {
f=(f)
}
return f
}
Aportes 14
Preguntas 0
¿En que momento se agrego la función AddMiddleware?
No se si es mi impresión pero en este video me acorde de JS y sus callback en el callback del callback…
type Middleware func(http.HandlerFunc) http.HandlerFunc
Se definió un type Middleware
que recibe y retorne http.HandlerFunc
así todas las funciones que cuenten con esta firma se considerarán de tipo Middleware. Reciben y retornan lo mismo, para poder encadenarse y pasar el request entre varios middleware, hasta llegar al handler
.
Algo interesante de esta definición es como Middleware tiene un type func
como parámetro, significa que recibirá una función como argumento que tiene una firma definida http.HandlerFunc
.
El operador elipsis (…) sirve para determinar una cantidad variable de parametros de un mismo tipo.
// Va a recibir una cantidad variable de argumentos de tipo Middleware
func example (middlewares ...Middleware) {}
¿El middlewares es una pieza de software en medio de otras dos?
Aqui esta la funcion completa:
func AddMidleware(f http.HandlerFunc, middlewares ...Middleware) http.HandlerFunc {
for _, m := range middlewares {
f = m(f)
}
return f
}
Empezó explicando de atrás para adelante
func CheckAuth() Middleware {
...
}
Quiere decir que ++ checkAuth() hace return un Middleware ++, no qué CheckAuth() es de tipo middleware. O me equivoco? (03:00)
Me tomo un poco de tiempo entender esto, aqui les dejo mis apuntes:
// checkAuth: funcion que no tiene parametros y devuelve una funcion de tipo Middleware
func CheckAuth() Middleware {
// Aqui estamos haciendo return nuestro Middleware
// (Middleware es una funcion que toma http.HandlerFunc como parametro
// y devuelve otra http.HandlerFunc)
return func(f http.HandlerFunc) http.HandlerFunc {
// Como Middleware devuelve un http.HandlerFunc, aqui estamos implementando
// ese HandlerFunc (http.HandlerFunc es una funcion que tiene
// http.ResponseWriter y *http.Request como parametros)
return func(w http.ResponseWriter, r *http.Request) {
flag := false
fmt.Println("Checking Authentication")
if flag {
f(w, r)
} else {
return
}
}
}
}
Lo que me quedo de esta clase es que al final los Middleware son Handlers también. Seguimos…
func (s *Server) AddMiddleware(f http.HandlerFunc, middlewares …Middleware) http.HandlerFunc {
for _, m := range middlewares {
f = m(f)
}
return f
}
Los middleware son handler que reciben cierta logica y determinar si siguen o no
Magasho
¿Por qué usamos el operador … para indicar que vamos a mandar varios handlers y no usamos un slice como parámetro?
CheckAuth es un hilos de handler
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?