Мало кода, но на первый взгляд это не паника при записи
header, а error при попытке
tw.Flush(), который вы не проверили. После записи
header, нужно залить собственно данные
tw.Write(data []byte) и уже потом делать
tw.Flush(). Вы в
header пообещали залить данные и не залили. Кажется должно быть что то вроде
if err := tw.WriteHeader(hdr); err != nil {
return err
}
if n, err := tw.Write(content); err != nil { //вот это не видно как вы сделали
return err
}
if tw.Flush(); err != nil{ //и нужно проверять все ошибки
return err
}