Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "sync"
- )
- func main() {
- toPrint := make(chan string)
- stop := make(chan struct{})
- go func() {
- for p := range toPrint {
- fmt.Printf(p) // Читаем строки из канала и принтим их в stdout
- }
- stop <- struct{}{} // Здесь шлём "событие" о том, что мы закончили вывод
- }()
- wg := sync.WaitGroup{}
- for i := 0; i <= 10; i++ {
- wg.Add(1)
- go func(i int) {
- for j := 0; j <= 5; j++ {
- toPrint <- fmt.Sprintf("%d-%d\n", i, j) // Посылаем строки в канал для печати
- }
- wg.Done()
- }(i)
- }
- wg.Wait()
- close(toPrint) // Закрываем канал toPrint (но это не гарантирует, что мы успели оттуда вычитать всё, что нужно, поэтому нужна отдельная проверка на остановку)
- <-stop // Здесь вычитываем "событие" о конце вывода
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement