Add examples for WaitErr methods

This commit is contained in:
Dan Jones 2025-11-13 17:07:55 -06:00
commit 06c15f8250

90
example_test.go Normal file
View file

@ -0,0 +1,90 @@
package waiterr_test
import (
"errors"
"fmt"
"time"
"codeberg.org/danjones000/waiterr"
)
func Example() {
we := new(waiterr.WaitErr)
we.Go(func() error {
time.Sleep(100 * time.Millisecond)
fmt.Println("Goroutine 1 finished")
return nil
})
we.Go(func() error {
time.Sleep(50 * time.Millisecond)
fmt.Println("Goroutine 2 finished with an error")
return errors.New("something went wrong in goroutine 2")
})
we.Go(func() error {
time.Sleep(150 * time.Millisecond)
fmt.Println("Goroutine 3 finished")
return nil
})
// Wait for all goroutines and get all errors
if err := we.Wait(); err != nil {
fmt.Printf("All goroutines finished. Combined error:\n%v\n", err)
}
// Output:
// Goroutine 2 finished with an error
// Goroutine 1 finished
// Goroutine 3 finished
// All goroutines finished. Combined error:
// something went wrong in goroutine 2
}
func ExampleWaitErr_WaitForError() {
we := new(waiterr.WaitErr)
we.Go(func() error {
time.Sleep(100 * time.Millisecond)
return errors.New("first error from we")
})
we.Go(func() error {
time.Sleep(50 * time.Millisecond)
return errors.New("second error from we")
})
if err := we.WaitForError(); err != nil {
fmt.Printf("First error returned from we: %v\n", err)
}
// Output:
// First error returned from we: second error from we
}
func ExampleWaitErr_Unwrap() {
we := new(waiterr.WaitErr)
we.Go(func() error {
time.Sleep(100 * time.Millisecond)
return errors.New("first error from we")
})
we.Go(func() error {
time.Sleep(50 * time.Millisecond)
return errors.New("second error from we")
})
we.Go(func() error {
time.Sleep(75 * time.Millisecond)
return nil
})
_ = we.Wait()
errs := we.Unwrap()
for _, e := range errs {
fmt.Println(e)
}
// Output:
// second error from we
// first error from we
}