审查生成的批量导出器

来自 defer、panic 与 recover
Go 1.27 高级 6分钟 找出 4处问题

审查这个生成的批量导出实现。

处理用户提交的导出任务,把文件限制在 /srv/exports 下,最多并发执行四项任务,关闭每个文件,等待全部任务完成,并以普通错误报告 I/O 失败而不让进程崩溃。

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
}

生成代码仅作示例,不代表任何特定模型

在试验场中打开
报告错误