使用golang解压缩文件的简便方法

使用golang解压缩文件的简便方法,第1张

使用golang解压缩文件的简便方法

OP的解决方案略作修改,以创建包含目录(

dest
如果不存在),并将文件提取/写入包装在闭包中,以消除
defer .Close()
每个@NickCraig-Wood注释的调用堆积:

func Unzip(src, dest string) error {    r, err := zip.OpenReader(src)    if err != nil {        return err    }    defer func() {        if err := r.Close(); err != nil { panic(err)        }    }()    os.MkdirAll(dest, 0755)    // Closure to address file descriptors issue with all the deferred .Close() methods    extractAndWriteFile := func(f *zip.File) error {        rc, err := f.Open()        if err != nil { return err        }        defer func() { if err := rc.Close(); err != nil {     panic(err) }        }()        path := filepath.Join(dest, f.Name)        if f.FileInfo().IsDir() { os.MkdirAll(path, f.Mode())        } else { os.MkdirAll(filepath.Dir(path), f.Mode()) f, err := os.OpenFile(path, os.O_WRonLY|os.O_CREATE|os.O_TRUNC, f.Mode()) if err != nil {     return err } defer func() {     if err := f.Close(); err != nil {         panic(err)     } }() _, err = io.Copy(f, rc) if err != nil {     return err }        }        return nil    }    for _, f := range r.File {        err := extractAndWriteFile(f)        if err != nil { return err        }    }    return nil}

注意: 更新后还包括Close()错误处理(如果我们正在寻找最佳实践,则不妨遵循所有最佳实践)。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5564731.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存