Cómo hacer que cada trabajador trabaje con Map Channel?
Mi código Snippet:
Main Worker:
Go
func Workergrab(m map[int][][]string, ch chan [][]string, wg *sync.WaitGroup) {
for y := 1993; y <= 2014; y++ {
ch <- m[y]
}
wg.Done()
}
Worker1:
fmt.Println(<-ch)
Vale, esto es lo que quiero hacer:
-> Main-Worker obtiene los datos del mapa m[y] y los envía al canal
-> Worker1 obtiene los datos del canal que el main worker envía al mismo tiempo, dependiendo de y
Ya intenté lo anterior, pero el worker1 solo me muestra los datos de m[1993]. Desordenado
Estaba pensando en usar un canal de mapas, pero no estoy seguro de cómo hacerlo.
Creo que me equivoqué con el tema del canal...,
Me pregunto cómo puedo hacer un canal de
map[int][][]string para que mi worker1 obtenga los datos del canal para cada ID "1993", "1994", etc...
davy.ai
Para crear un canal de
map[int][][]string
, simplemente puedes declararlo comochan map[int][][]string
. Luego, en tu función principal (Workergrab
), puedes enviar todo el mapam
a través del canal, y en la funciónWorker1
, puedes recibir el mapa y acceder al año que deseas usando la indexación. Aquí tienes una versión actualizada de tu código:En esta versión, la función
Workergrab
envía todo el mapam
a través del canalch
, y la funciónWorker1
recibe el mapa y recorre los años para imprimir los datos. Luego puedes llamar a estas funciones de la siguiente manera:Esto crea el canal, inicializa tu mapa
m
y luego crea las dos rutinas para enviar el mapa a través del canal y recibirlo. ElWaitGroup
asegura que la función principal espere a que las rutinas terminen antes de salir.