Sobes.tech
Middle+

func FetchAll(ctx context.Context, urls []string, concurrency int) ([]Result, error) { // Dein Code hier return nil, nil }

sobes.tech KI

Antwort von AI

go func FetchAll(ctx context.Context, urls []string, concurrency int) ([]Result, error) { type resultWithError struct { res Result err error }

results := make([]Result, len(urls))
ch := make(chan resultWithError)
sem := make(chan struct{}, concurrency) // Begrenzung der gleichzeitigen Ausführung

for i, url := range urls {
    select {
    case <-ctx.Done():
        return nil, ctx.Err()
    case sem <- struct{}{}: // Slot reservieren
    }

    go func(i int, url string) {
        defer func() { <-sem }() // Slot freigeben
        res, err := Fetch(ctx, url) // Annahme: Funktion Fetch existiert
        ch <- resultWithError{res, err}
    }(i, url)
}

for i := 0; i < len(urls); i++ {
    select {
    case <-ctx.Done():
        return nil, ctx.Err()
    case r := <-ch:
        if r.err != nil {
            return nil, r.err
        }
        results[i] = r.res
    }
}

return results, nil

}