Golang, o simplemente Go, se conoce como el lenguaje Go gopher. Si aún no entiendes por qué la tuza, puedes encontrar una sorprendente historia de la mascota en este artículo. Bueno, comencemos desde el principio: Golang se ha hecho conocido como uno de los lenguajes de programación más productivos que existen. A diferencia de los lenguajes tradicionales como Java o Python, Go logra un equilibrio único entre código fácil de escribir y ejecución rápida, acelerando el desarrollo y reduciendo el tiempo de depuración y prueba. Este artículo analizará un ejemplo del mundo real del uso de gorutinas y contexto en un proyecto que interactúa con un microservicio API REST lento e inestable.
La tarea
Imaginemos que acaba de unirse al equipo y el líder de su equipo le pide que vincule un nuevo microservicio escrito en Golang (por ejemplo, el administrador de riesgos) al microservicio de usuario expuesto a través de la API REST.
El problema
El administrador de riesgos necesita interactuar con una API REST que puede ser lenta e inestable, lo que requiere que manejemos dichas solicitudes con cuidado. Usaré gorutinas para solicitudes HTTP asincrónicas y contexto para administrar los tiempos de espera de las solicitudes y el manejo de errores.
La solución
El uso de rutinas y contexto en Golang permite una gestión eficiente de tareas simultáneas y el manejo de API externas lentas o inestables.
El primer paso para interpretarlo en un código es crear la API, utilicé el servicio shareware https://mockapi.io/ Conviene generar un REST API con un conjunto básico de entidades, como usuarios.
Supongamos que alguien hizo todo lo posible y su empresa tiene un servicio interno que enumera a los usuarios. Nuestra tarea es reutilizar la lista de usuarios en el nuevo administrador de riesgos (la estructura de datos del usuario cumple con el contrato descrito por mockapi.io). El siguiente código realiza una solicitud, procesa el cuerpo y genera una lista de usuarios o el error correspondiente.
type User struct { CreatedAt string Name string Avatar string Id string } // Original slow request func fetchUsers(ctx context.Context) (*[]User, error) { resp, err := http.Get("https://
Para controlar la operación, usaré el contexto principal superior para todos los demás contextos: contexto.Fondo. Complementaré este contexto con nuevos datos, en este caso el tiempo de espera: contexto.WithTimeout, que definiré como 2 segundos. Puedes leer más sobre cómo trabajar con contextos en Go en este artículo.
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) defer cancel() usersChan := make(chan *[]User) errChan := make(chan error) go func() { users, err := fetchUsers(ctx) if err != nil { errChanEn el ejemplo, utilizo dos canales: usersChan para registrar el resultado recibido de nuestro servicio interno y el segundo canal errChan, para registrar el error.
Si la respuesta de una API lenta no llega en 2 segundos, detectamos un error y damos la oportunidad de procesarlo correctamente en una capa externa.En este ejemplo práctico con el administrador de riesgos, las rutinas permitieron solicitudes HTTP asincrónicas, mientras que el contexto garantizó el manejo del tiempo de espera, lo cual es fundamental para crear microservicios confiables y resistentes.
PD.
Este artículo está destinado a desarrolladores principiantes que tienen conocimientos básicos, pero poca idea de dónde pueden aplicar sus conocimientos. Estaré encantado de recibir sus comentarios y estaré encantado de responder sus preguntas.
Puede encontrar un ejemplo práctico y varias otras implementaciones de las cosas más básicas en el lenguaje Go en mi GitHub, en el enlace
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3