Echemos un vistazo al patrón de entrada en abanico. Esto es realmente útil cuando tenemos datos relacionados de múltiples hilos que necesitamos reunir.
Por ejemplo, supongamos que ha realizado varias llamadas API a diferentes servicios y necesita combinar los resultados.
Este es un patrón realmente fácil de implementar, pero debes prestar atención a cómo manejas los canales. Es fácil llegar a una condición de punto muerto.
// produce is used to simulate the different data sources func produce(id int) chan int { ch := make(chan int) go func() { for i := 0; iAquí usamos la función producir para simular las diferentes fuentes. Estos canales fuente se envían a la función fanin que realiza la operación de combinación.
La función fanin crea el canal de salida y luego lanza una rutina que opera en cada entrada. Usamos un WaitGroup para indicar cuándo todas las fuentes de entrada se han combinado en el canal de salida.
En este ejemplo simple, el hilo principal simplemente itera sobre la salida. Tenga en cuenta que no hay garantía en el pedido, los valores de las 2 entradas están mezclados.
Un punto clave a mencionar es que tenemos que cerrar el canal de salida cuando terminemos de combinar las entradas. El operador de rango esperará indefinidamente una vez que el canal esté vacío. Comente la línea de cierre (salida) y verá que obtiene una condición de punto muerto.
¿Cómo podemos mejorar esto? Déjame un comentario a continuación.
¡Gracias!
El código de esta publicación y todas las publicaciones de esta serie se pueden encontrar aquí
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