archive/tar

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

Read and write tar archives (streaming). Typically combined with compress/gzip for .tar.gz.

Write a tar archive

NewWriter + WriteHeader + Write

tw := tar.NewWriter(out)
defer tw.Close()

for _, f := range files {
    hdr := &tar.Header{
        Name: f.name,
        Mode: 0o644,
        Size: int64(len(f.data)),
    }
    if err := tw.WriteHeader(hdr); err != nil { return err }
    if _, err := tw.Write(f.data); err != nil { return err }
}

Read a tar archive

NewReader + Next loop

tr := tar.NewReader(in)
for {
    hdr, err := tr.Next()
    if err == io.EOF { break }
    if err != nil { return err }
    fmt.Println(hdr.Name, hdr.Size)
    io.Copy(io.Discard, tr) // or into a file
}