Метод gzip.Writer.Close
Метод gzip.Writer.Close завершает процесс создания gzip-архива.
Он записывает в выходной поток все оставшиеся данные,
вычисляет и записывает контрольную сумму CRC32 и исходную длину данных.
После вызова этого метода дальнейшая запись данных становится невозможной,
а нижележащий io.Writer также закрывается, если он реализует
интерфейс io.Closer. Метод возвращает ошибку, если
в процессе записи закрывающего заголовка произошла ошибка.
Синтаксис
func (w *Writer) Close() error
Пример
Давайте создадим gzip-архив из строки и успешно его закроем:
package main
import (
"bytes"
"compress/gzip"
"fmt"
"io"
)
func main() {
var buf bytes.Buffer
gz := gzip.NewWriter(&buf)
_, err := gz.Write([]byte("hello world"))
if err != nil {
fmt.Println("write error:", err)
return
}
err = gz.Close()
if err != nil {
fmt.Println("close error:", err)
return
}
// Проверяем, что данные записаны и закрыты
r, err := gzip.NewReader(&buf)
if err != nil {
fmt.Println("reader error:", err)
return
}
defer r.Close()
data, _ := io.ReadAll(r)
fmt.Println(string(data))
}
Результат выполнения кода:
"hello world"
Пример
Попробуем записать данные после вызова метода Close -
это приведет к ошибке:
package main
import (
"bytes"
"compress/gzip"
"fmt"
)
func main() {
var buf bytes.Buffer
gz := gzip.NewWriter(&buf)
gz.Write([]byte("hello"))
// Закрываем архиватор
err := gz.Close()
if err != nil {
fmt.Println("close error:", err)
return
}
// Попытка записи после закрытия
_, err = gz.Write([]byte(" world"))
if err != nil {
fmt.Println("write after close:", err)
}
}
Результат выполнения кода:
"write after close: gzip: writer is closed"
Смотрите также
-
метод
gzip.Writer.Flush,
который сбрасывает данные в выходной поток без завершения архива -
метод
gzip.Writer,
общее описание структуры для создания gzip-архивов -
метод
gzip.NewWriter,
который создает новый экземплярWriter -
метод
gzip.NewWriterLevel,
который создаетWriterс заданным уровнем сжатия