archive/zip

Guided tour · Archives & Compression · pkg.go.dev →

Read and write ZIP archives. Random-access (needs io.ReaderAt for reading).

Write a ZIP

NewWriter + Create

zw := zip.NewWriter(out)
defer zw.Close()

for name, data := range files {
    w, err := zw.Create(name)
    if err != nil { return err }
    if _, err := w.Write(data); err != nil { return err }
}

Read a ZIP

OpenReader

r, err := zip.OpenReader("x.zip")
if err != nil { log.Fatal(err) }
defer r.Close()
for _, f := range r.File {
    fmt.Println(f.Name, f.UncompressedSize64)
    rc, _ := f.Open()
    io.Copy(io.Discard, rc)
    rc.Close()
}

Use as fs.FS

r, _ := zip.OpenReader("x.zip")
data, _ := fs.ReadFile(r, "inside/file.txt")