постоянная запись в канал

Реализовать постоянную запись данных в канал (главный поток). Реализовать набор из N воркеров, которые читают произвольные данные из канала и выводят в stdout.

Я начал с того что хотел записать значение в канал и запустить тестово несколько воркеров которые это значение выведут

package main

import (
    "context"
    "log"
    "os/signal"
    "sync"
    "syscall"
    "time"
)

func Worker(ch chan int64, ctx context.Context, wg *sync.WaitGroup) {
    for {
        select {
        case <-ctx.Done():
            data, ok := <-ch
            if !ok {
                println("channel closed")
                return
            }
            println(data, "saved")
        default:
            println(<-ch)
        }
    }
}

func main() {
    ch := make(chan int64)
    ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT)
    for i := 0; i < 5; i++ {
        go Worker(ch, ctx, nil)
    }
    for {
        select {
        case <-ctx.Done():
            cancel()
            log.Println("CANCEL")
            return
        default:
            ch <- time.Now().Unix()
            time.Sleep(time.Second)
        }
    }
}

Ответы (0 шт):