Documentation ¶
Index ¶
- func NewOptions() *options
- func PrintOptions(packageName string)
- type Group
- func (g *Group) Go(f func() error)
- func (g *Group) GoCtx(ctx context.Context, f func(ctx context.Context) error)
- func (g *Group) SetLimit(n int)
- func (_g *Group) SetOptions(_opts ...Option) *Group
- func (g *Group) TryCtxGo(ctx context.Context, f func(ctx context.Context) error) bool
- func (g *Group) TryGo(f func() error) bool
- func (g *Group) Wait() error
- type Option
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func PrintOptions ¶
func PrintOptions(packageName string)
Types ¶
type Group ¶
type Group struct {
// contains filtered or unexported fields
}
Example (JustErrors) ¶
JustErrors illustrates the use of a Group in place of a sync.WaitGroup to simplify goroutine counting and error handling. This example is derived from the sync.WaitGroup example at https://golang.org/pkg/sync/#example_WaitGroup.
g := New() var urls = []string{ "http://www.golang.org/", "http://www.google.com/", "http://www.somestupidname.com/", } for _, url := range urls { // Launch a goroutine to fetch the URL. url := url // https://golang.org/doc/faq#closures_and_goroutines g.Go(func() error { // Fetch the URL. resp, err := http.Get(url) if err == nil { resp.Body.Close() } return err }) } // Wait for all HTTP fetches to complete. if err := g.Wait(); err == nil { fmt.Println("Successfully fetched all URLs.") }
Output:
Example (Parallel) ¶
Parallel illustrates the use of a Group for synchronizing a simple parallel task: the "Google Search 2.0" function from https://talks.golang.org/2012/concurrency.slide#46, augmented with a Context and error-handling.
Google := func(ctx context.Context, query string) ([]Result, error) { g, ctx := WithContext(ctx) searches := []Search{Web, Image, Video} results := make([]Result, len(searches)) for i, search := range searches { i, search := i, search // https://golang.org/doc/faq#closures_and_goroutines g.Go(func() error { result, err := search(ctx, query) if err == nil { results[i] = result } return err }) } if err := g.Wait(); err != nil { return nil, err } return results, nil } results, err := Google(context.Background(), "golang") if err != nil { fmt.Fprintln(os.Stderr, err) return } for _, result := range results { fmt.Println(result) }
Output: web result for "golang" image result for "golang" video result for "golang"
func (*Group) SetOptions ¶
type Option ¶
type Option interface {
// contains filtered or unexported methods
}
Option option interface
func SkipOption ¶
func SkipOption() Option
func WithOptions ¶
func WithOptions(o *options) Option
func WithPanicHandler ¶
func WithPanicHandler(panicHandler ho.PanicHandler) Option
WithPanicHandler panicHandler option of Group
Click to show internal directories.
Click to hide internal directories.