github.com/zly-app/zapp@v1.3.3/pkg/compactor/compactor.go (about) 1 package compactor 2 3 import ( 4 "io" 5 6 "go.uber.org/zap" 7 8 "github.com/zly-app/zapp/logger" 9 ) 10 11 type ICompactor interface { 12 // 压缩 13 Compress(in io.Reader, out io.Writer) error 14 // 压缩 15 CompressBytes(in []byte) (out []byte, err error) 16 // 解压缩 17 UnCompress(in io.Reader, out io.Writer) error 18 // 解压缩 19 UnCompressBytes(in []byte) (out []byte, err error) 20 } 21 22 var compactorList = map[string]ICompactor{ 23 RawCompactorName: NewRawCompactor(), 24 ZStdCompactorName: NewZStdCompactor(), 25 GzipCompactorName: NewGzipCompactor(), 26 } 27 28 // 注册压缩器, 重复注册会panic 29 func RegistryCompactor(name string, c ICompactor, replace ...bool) { 30 if len(replace) == 0 || !replace[0] { 31 if _, ok := compactorList[name]; ok { 32 logger.Log.Panic("Compactor重复注册", zap.String("name", name)) 33 } 34 } 35 compactorList[name] = c 36 } 37 38 // 获取压缩器, 压缩器不存在会panic 39 func GetCompactor(name string) ICompactor { 40 c, ok := compactorList[name] 41 if !ok { 42 logger.Log.Panic("未定义的CompactorName", zap.String("name", name)) 43 } 44 return c 45 } 46 47 // 尝试获取压缩器 48 func TryGetCompactor(name string) (ICompactor, bool) { 49 c, ok := compactorList[name] 50 return c, ok 51 }