otro video mal editado, tenaz que esta clase de vídeos se publiquen así y no pasen por una revisión.
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
Aportes 11
Preguntas 2
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.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?