pgzip是个利用多核压缩的库,github.com/klauspost/pgzip
废话不多说直接上代码!!!,被压缩的可以是文件,文件夹,一些文件创建的基本方法就不展示了,核心就是一下流程

import (
	"archive/tar"
	"github.com/klauspost/pgzip"
	"io"
	"io/fs"
	"os"
	"runtime"
	"strings"
)

func Compress(destFile string, s ...string) error {
	d, _ := CreateFile(destFile)
	defer d.Close()
	gw, err := pgzip.NewWriterLevel(d, 6)
	if err != nil {
		return err
	}
	err = gw.SetConcurrency(2<<20, runtime.GOMAXPROCS(0))
	if err != nil {
		return err
	}
	defer gw.Close()
	tw := tar.NewWriter(gw)
	defer tw.Close()

	for _, v := range s {
		f, err := os.Open(v)
		if err != nil {
			return err
		}
		err = compress(f, "", tw)
		if err != nil {
			return err
		}
	}

	return nil
}

// DeCompress /usr/aaa.tar.gz /usr/tmp/


func compress(file *os.File, prefix string, tw *tar.Writer) error {
	info, err := file.Stat()
	if err != nil {
		return err
	}
	if info.IsDir() {
		if prefix != "" {
			prefix = prefix + "/" + info.Name()
		} else {
			prefix = info.Name()
		}

		fileInfos, err := file.Readdir(-1)
		if err != nil {
			return err
		}
		for _, fi := range fileInfos {
			f, err := os.Open(file.Name() + "/" + fi.Name())
			if err != nil {
				return err
			}
			err = compress(f, prefix, tw)
			if err != nil {
				return err
			}
		}
	} else {
		header, err := tar.FileInfoHeader(info, "")
		if prefix != "" {
			header.Name = prefix + "/" + header.Name
		}

		if err != nil {
			return err
		}
		err = tw.WriteHeader(header)
		if err != nil {
			return err
		}
		_, err = io.Copy(tw, file)
		file.Close()
		if err != nil {
			return err
		}
	}
	return nil
}

func CreateFile(file string) (*os.File, error) {
	file = strings.Replace(file, "\\", "/", -1)
	err := os.MkdirAll(path.Dir(substr(file, 0, strings.LastIndex(file, "/")+1)), os.ModePerm)
	if err != nil {
		return nil, err
	}

	if fileutil.IsExist(file) {
		err = os.Remove(file)
		if err != nil {
			return nil, err
		}
	}

	return os.Create(file)
}

func FormatDir(dir string) string {
	dir = gstr.Replace(dir, "\\", "/")
	if !strings.HasSuffix(dir, "/") {
		dir = dir + "/"
	}
	return dir
}
	err := Compress(
		"D:\\ChromeCoreDownloads\\云盘缓存\\a.tgz",
		"D:\\ChromeCoreDownloads\\Dockerfile",
		"D:\\ChromeCoreDownloads\\插件\\igg_install",
	)
	
	if err != nil {
		fmt.Println(err)
	}

	err = DeCompress("D:\\ChromeCoreDownloads\\云盘缓存\\a.tgz",
		"D:\\ChromeCoreDownloads\\云盘缓存\\")
	if err != nil {
		fmt.Println(err)
	}