Bienvenidos a una nueva entrega del curso, en este apartado, veremos goroutines (Go-rutinas) que son hilos de ejecución, Canales mecanismo de comunicación para envió y recepción de datos entre dos go-rutinas y Select para  escuchar simultáneamente en varios canales, por supuesto, una explicación de cada una de ellas  y propondremos  pequeñas pruebas, para que seáis vosotros quienes valoréis si realmente estamos afianzando los conceptos expuestos en esta parte del curso.

Recordaros que en el quinto apartado del curso vimos como tratar los distintos errores.

 https://blog.ironchip.net/2019/04/24/05-curso-go-errores/

Goroutines

Una goroutine es un hilo o thread de ejecución ligero.

Supongamos que tenemos una llamada a la función “returnType”. 

Para llamar esta función en una goroutine usamos go func ( ). Linea (32) Esta nueva goroutine se ejecutara de manera concurrente a la que la está llamando. 

Canales

Los Canales son las tuberías que conectan los distintos goroutines concurrentes. Puedes enviar los valores por un canal de una goroutine y recibir esos valores en otra goroutine.

Puedes crear un canal nuevo con make (chan val-type). Linea 10

Envía un valor por un canal usando la sintaxis canal <-. Aquí estamos enviando “ping” al canal.

La sintaxis <-canal recibe un valor del canal especificado. Aquí recibimos el mensaje “ping”.

Prueba: Canales

Correremos varios Goroutines, hilos, para obtener datos de sitios web.

Seleccionar

La función select de Go te permite esperar los resultados de las operaciones de varios canales. Combinar goroutines y canales con select es una de las características más poderosas de Go.

Vamos a usar select para esperar ambos valores simultáneamente, y mostraremos cada uno conforme llegue.

Por ejemplo lineas [16 : 21]

El tiempo de ejecución total es ínfimo  porque ambos Sleeps se ejecutan de manera concurrente.

Prueba: MD5

Calcula la firma md5 de varios archivos simultáneamente, su entrada es un archivo donde cada linea tiene una firma esperada y un nombre de archivo.Como en el ejemplo:

6c6427da7893932731901035edbb9214 nasa-00.log

Debe analizar el archivo y luego para cada uno calcular la actual firma md5  del archivo. Si no coincide con el valor esperado, mostrar mensaje de error.

Encontraras implementación de md5 en el paquete crypto/md5

Usa bufio.Scanner. El paquete bufio implementa E / S en búfer. Envuelve un objeto io.Reader o io.Writer, creando otro objeto (Reader o Writer) que también implementa la interfaz pero proporciona almacenamiento en búfer y ayuda para la E / S textual.

Usa strings. Fields para dividir una linea.

En nuestro caso tenemos un directorio llamado nasa-logs que contiene los archivos con las firmas.

Este es el que recoge y comprueba la suma md5.

Vuestra ejecución debería ser algo parecido a esto, comprueba sino hay ninguna modificación, ningún error no mostrar nada en la consola, si por el contrario, si se modificaron nos indicara en cual de ellas no concuerda la firma, os propongo que lo probéis modificando alguna de ellas y volviéndolo a ejecutar.

Conclusión

Al finalizar esta entrega del curso, seremos capaces de utilizar las Goroutines, enviarlas o recibirlas mediante canales, a través de la función select combinar goroutines y canales y una breve introducción al cálculo de firmas md5.

En la próxima entrega aprenderemos una parte muy importante de la programación como son el gestionar requerimientos, pruebas o testing para comprobar que todo esta funcionando como debería.


Xabier Sestafe

Xabier Sestafe

Explotacion de Sistemas informaticos, Administracion de Sistemas Informaticos en Red, Desarrollador de Aplicaciones Multiplataforma. Gran interes en todo lo relacionado con el desarrollo de aplicaciones, apasionado de las redes. Me considero ambicioso siempre queriendo aprender cosas nuevas, con gran actitud para enfocar cualquier problema, me encanta trabajar en equipo y conocer gente por el camino

Leave a Reply

Your email address will not be published. Required fields are marked *