Advertisement
Guest User

Untitled

a guest
Jul 19th, 2019
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.00 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "fmt"
  5.     "sync"
  6. )
  7.  
  8. func main() {
  9.     toPrint := make(chan string)
  10.     stop := make(chan struct{})
  11.  
  12.     go func() {
  13.         for p := range toPrint {
  14.             fmt.Printf(p) // Читаем строки из канала и принтим их в stdout
  15.         }
  16.         stop <- struct{}{} // Здесь шлём "событие" о том, что мы закончили вывод
  17.     }()
  18.  
  19.     wg := sync.WaitGroup{}
  20.     for i := 0; i <= 10; i++ {
  21.         wg.Add(1)
  22.         go func(i int) {
  23.             for j := 0; j <= 5; j++ {
  24.                 toPrint <- fmt.Sprintf("%d-%d\n", i, j) // Посылаем строки в канал для печати
  25.             }
  26.             wg.Done()
  27.         }(i)
  28.     }
  29.     wg.Wait()
  30.     close(toPrint) // Закрываем канал toPrint (но это не гарантирует, что мы успели оттуда вычитать всё, что нужно, поэтому нужна отдельная проверка на остановку)
  31.  
  32.     <-stop // Здесь вычитываем "событие" о конце вывода
  33. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement