постоянная запись в канал
Реализовать постоянную запись данных в канал (главный поток). Реализовать набор из 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)
}
}
}