Menangguhkan Penutupan Penulis GZIP Keputusan dalam Kehilangan Data
Latar Belakang:
Apabila bekerja dengan gzip, menggunakan gzip .NewWriter untuk memampatkan data dan menangguhkan Close() untuk menutup penulis boleh menyebabkan kehilangan data mampat.
Isu:
Menunda penutupan penulis GZIP menyebabkan kehilangan daripada pengaki GZIP. Seperti yang dinyatakan dalam dokumentasi fungsi Tutup:
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.
Penyelesaian:
Untuk mengelakkan kehilangan data, tutup penulis GZIP sebelum mengembalikan data termampat:
<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>
Atas ialah kandungan terperinci Mengapa Menangguhkan Penutupan Penulis GZIP Membawa kepada Kehilangan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!