import (
"fmt"
"archive/zip"
"io"
"os"
"path/filepath"
"strings"
)
var zipFile = "data.zip"
var err = unzip(zipFile, "tmp/")
if err != nil {
fmt.Println(err)
}
func unzip(src, dest string) error {
zipFile, err := zip.OpenReader(src)
if err != nil {
return err
}
defer zipFile.Close()
for _, f := range zipFile.File {
fileFrom, err := f.Open()
if err != nil {
return err
}
defer fileFrom.Close()
fpath := filepath.Join(dest, f.Name)
if f.FileInfo().IsDir() {
os.MkdirAll(fpath, f.Mode())
} else {
var fdir string
if lastIndex := strings.LastIndex(fpath,
string(os.PathSeparator)); lastIndex > -1 {
fdir = fpath[:lastIndex]
}
err = os.MkdirAll(fdir, f.Mode())
if err != nil {
return err
}
fileTo, err := os.OpenFile(fpath,
os.O_WRONLY|os.O_CREATE|os.O_TRUNC,
f.Mode())
if err != nil {
return err
}
defer fileTo.Close()
_, err = io.Copy(fileTo, fileFrom)
if err != nil {
return err
}
}
}
return nil
}