es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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...

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para crear un canal de map[int][][]string, simplemente puedes declararlo como chan map[int][][]string. Luego, en tu función principal (Workergrab), puedes enviar todo el mapa m a través del canal, y en la función Worker1, 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:

    func Workergrab(m map[int][][]string, ch chan map[int][][]string, wg *sync.WaitGroup) {
        ch <- m
        wg.Done()
    }
    
    func Worker1(ch chan map[int][][]string) {
        data := <-ch
        for y := 1993; y <= 2014; y++ {
            fmt.Println(data[y])
        }
    }
    

    En esta versión, la función Workergrab envía todo el mapa m a través del canal ch, y la función Worker1 recibe el mapa y recorre los años para imprimir los datos. Luego puedes llamar a estas funciones de la siguiente manera:

    m := // La inicialización de tus datos de `map[int][][]string` aquí
    
    var wg sync.WaitGroup
    wg.Add(1)
    
    ch := make(chan map[int][][]string)
    
    go Workergrab(m, ch, &wg)
    go Worker1(ch)
    
    wg.Wait()
    

    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. El WaitGroup asegura que la función principal espere a que las rutinas terminen antes de salir.

Comments are closed.