package main import ( "archive/tar" "compress/gzip" "io" "os" ) func main() { Compress("01.png", "02.tar.gz") } func Compress(file string, dest string) error { f, err := os.Open(file) if err != nil { return err } defer f.Close() d, err := os.Create(dest) if err != nil { return err } defer d.Close() gw := gzip.NewWriter(d) defer gw.Close() tw := tar.NewWriter(gw) defer tw.Close() info, err := f.Stat() if err != nil { return err } header, err := tar.FileInfoHeader(info, "") if err != nil { return err } err = tw.WriteHeader(header) if err != nil { return err } _, err = io.Copy(tw, f) if err != nil { return err } return nil }