Skip to content

Latest commit

 

History

History
34 lines (27 loc) · 801 Bytes

26-goroutine-exit.md

File metadata and controls

34 lines (27 loc) · 801 Bytes

Aguarde as goroutines terminarem

Dada uma goroutine iniciada pelo sistema, deve haver uma maneira de aguardar a saída da goroutine. Existem duas maneiras populares de fazer isso:

  • Use um sync.WaitGroup. Faça isso se houver várias goroutines das quais você deseja aguardar a conclusão:

    var wg sync.WaitGroup
    for i := 0; i < N; i++ {
      wg.Add(1)
      go func() {
        defer wg.Done()
        // ...
      }()
    }
    
    // Para aguardar todas finalizarem:
    wg.Wait()
  • Adicione outro chan struct{} que a goroutine fecha quando termina. Faça isso se houver apenas uma goroutine:

    done := make(chan struct{})
    go func() {
      defer close(done)
      // ...
    }()
    
    // Para aguardar a goroutine terminar:
    <-done