Go 中 Gzip 与 json 搭配使用压缩数据
前言
在日常工作中,如果遇到数据量大的情况,在 db 中是不能直接存储某些字段的,一般会用 json 进行marshal 为 byte 再存入。但是如果此时占用空间依旧过大,则可以考虑再用 gzip 还进一步压缩。
Gzip 包
go标准库的gzip包中提供了两个操作,分别是压缩和解压
常量和变量
const (
NoCompression = flate.NoCompression // 不压缩
BestSpeed = flate.BestSpeed // 最快速度
BestCompression = flate.BestCompression // 最佳压缩比
DefaultCompression = flate.DefaultCompression // 默认压缩比
)
var (
// 当读取gzip数据时发现无效的校验和时将返回该错误
ErrChecksum = errors.New("gzip: invalid checksum")
// 当读取gzip数据时发现无效的数据头时将返回该错误
ErrHeader = errors.New("gzip: invalid header")
)
//数据头结构
type Header struct {
Comment string // 文件注释
Extra []byte // 附加数据
ModTime time.Time // 文件修改时间
Name