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 }
}