golang如何压缩和解压文件_golang文件压缩解压步骤
gzip仅压缩单文件流不处理目录打包archive/zip支持多文件但需手动路径净化防Zip Sliptar.gz须先tar后gzip嵌套顺序错误将导致乱码。gzip 只能压单个文件别指望它打包目录Go 的 compress/gzip 本质是压缩算法封装不处理文件组织——它连“文件”概念都没有只认 io.Reader 流。想用它压一个目录会直接 panic 或生成损坏的 .gz 文件。必须显式调用 gzWriter.Close()否则尾部 CRC 和 ISIZE 写不进去gunzip -t 会报 unexpected end of file解压时不能 os.Open 后直接读二进制得用 gzip.NewReader() 包一层再传给 io.Copy压缩级别选 gzip.BestSpeed适合日志、gzip.DefaultCompression通用别用 gzip.NoCompression 除非你只是想套个壳archive/zip 才是多文件打包正解但路径一错就解压失败archive/zip 支持多文件目录但不会自动递归遍历也不会帮你清理路径——你传 C:ooar.txt 进去它真就照写macOS 和 Linux 解压工具可能直接静默跳过。所有路径必须转正斜杠filepath.ToSlash(relPath)比如 subile.txt → sub/file.txt目录条目要手动加尾部斜杠header.Name dir/否则解压端识别不了这是空目录每个文件写入前必须设 header.Method zip.Deflate否则默认 zip.Store零压缩zw.Close() 不可省略它负责写 ZIP 中央目录区缺了就是非法 ZIP 文件解压 ZIP 时不做路径校验等于敞开系统文件被覆盖的大门攻击者只要在 ZIP 里塞一个 ../../etc/passwd你用 filepath.Join(outputDir, f.Name) 一拼就可能把系统关键文件覆盖掉——这叫 Zip Slip 漏洞Go 标准库不拦截全靠你自己防。 Vozo Vozo是一款强大的AI视频编辑工具可以帮助用户轻松重写、配音和编辑视频。