archive & compress
archive
文件归档(打包),将多个文件或目录合并为单一归档文件(如.tar
、.zip
),保留文件结构、权限等元信息。
核心子包:
archive/tar
:处理Unix/Linux系统的TAR格式(.tar
),支持文件头信息(权限、时间戳等)archive/zip
:处理ZIP格式(.zip
),跨平台兼容性更强,支持压缩与加密
zip 使用
1、Writer: 将多个文件📦进一个 xxx.zip 里。 2、Reader: 从一个 xxx.zip 里读取所有file。 3、在 Writer 时可以指定压缩算法,提高压缩效率,减少体积。
例子见:https://github.com/vadam-zhan/cortana/blob/master/go/archive/zip.go
tar 使用
1、Writer: 将多个文件📦进一个 buf 缓冲区里。 2、Reader: 从缓冲区 里读取所有file。 3、可以将缓冲区换成 xxx.tar 文件,类比 zip 操作。
例子见:https://github.com/vadam-zhan/cortana/blob/master/go/archive/tar.go#L18
compress
数据流压缩,对单个数据流(或文件)进行压缩/解压,减少体积,不处理文件结构。
核心子包:
compress/gzip
:实现GZIP格式(.gz
),常用于HTTP响应压缩compress/zlib
:提供ZLIB压缩算法,适用于网络传输compress/flate
:DEFLATE算法基础库(GZIP/ZLIB均基于此)
gzip
zlib
flate
典型使用场景:
先archive/tar
打包,再用compress/gzip
压缩 → .tar.gz
维度 | **archive ** | **compress ** |
---|---|---|
核心目标 | 多文件打包(保留结构) | 单数据流压缩(减少体积) |
输出格式 | .tar , .zip | .gz , .zlib |
元数据处理 | 支持(文件名、权限等) | 无(仅压缩原始字节流) |
典型组合 | 先archive/tar 打包,再用compress/gzip 压缩 → .tar.gz | 直接压缩单个文件(如compress/gzip ) |
应用场景:
- HTTP响应压缩:Gin框架的GZIP中间件
- 数据库存储:压缩大型文本或二进制数据