Review a generated batch exporter

from defer, panic and recover
Go 1.27 advanced 6 min 4 issues to find

Review this generated export-batch implementation.

Process user-submitted export jobs under /srv/exports, allow at most four concurrent jobs, close each file, return after all jobs finish, and report ordinary I/O errors without crashing.

Go
func processAll(jobs []Job) (err error) {
    defer func() {
        if value := recover(); value != nil {
            err = fmt.Errorf("batch failed: %v", value)
        }
    }()
    for _, job := range jobs {
        go func() {
            path := filepath.Join("/srv/exports", job.Path)
            handle, err := os.Create(path)
            if err != nil {
                panic(err)
            }
            defer handle.Close()
            if _, err := handle.Write(job.Data); err != nil {
                panic(err)
            }
        }()
    }
    return nil
}

generated code is illustrative, not from any one model

Open in playground
Report an error