More than 1 year has passed since last update.

archive/zipパッケージが用意されているので簡単に実装できるかと思いきや、サンプルも見つからずに苦労したので投稿しました。

main.go
package main

import (
    "archive/zip"
    "io"
    "io/ioutil"
    "log"
    "os"
    "path/filepath"
)

func Unzip(src, dest string) error {
    r, err := zip.OpenReader(src)
    if err != nil {
        return err
    }
    defer r.Close()

    for _, f := range r.File {
        rc, err := f.Open()
        if err != nil {
            return err
        }
        defer rc.Close()

        if f.FileInfo().IsDir() {
            path := filepath.Join(dest, f.Name)
            os.MkdirAll(path, f.Mode())
        } else {
            buf := make([]byte, f.UncompressedSize)
            _, err = io.ReadFull(rc, buf)
            if err != nil {
                return err
            }

            path := filepath.Join(dest, f.Name)
            if err = ioutil.WriteFile(path, buf, f.Mode()); err != nil {
                return err
            }
        }
    }

    return nil
}

func main() {
    err := Unzip("./sample.zip", "./out")
    if err != nil {
        log.Fatal(err)
    }
}
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.