Le report de la fermeture de l'éditeur GZIP entraîne une perte de données
Contexte :
Lorsque vous travaillez avec gzip, utilisez gzip .NewWriter pour compresser les données et différer Close() pour fermer l'enregistreur peut entraîner une perte de données compressées.
Problème :
Différer la fermeture de l'enregistreur GZIP entraîne l'absence de du pied de page GZIP. Comme spécifié dans la documentation de la fonction Close :
Close closes the Writer by flushing any unwritten data to the underlying io.Writer and writing the GZIP footer. It does not close the underlying io.Writer.
Solution :
Pour éviter la perte de données, fermez l'enregistreur GZIP avant de renvoyer les données compressées :
<code class="go">func zipData(originData []byte) ([]byte, error) { var bf bytes.Buffer gw := gzip.NewWriter(&bf) _, err := gw.Write(originData) if err != nil { return nil, errors.New(fmt.Sprintf("gzip data err: %v", err)) } err = gw.Flush() if err != nil { return nil, err } if err := gw.Close(); err != nil { return nil, errors.New(fmt.Sprintf("close data err: %v", err)) } return bf.Bytes(), nil }</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!