Метод gzip.Reader.Close
Метод gzip.Reader.Close закрывает ридер,
освобождая все ресурсы, связанные с ним.
Это включает закрытие базового io.Reader,
а также освобождение внутренних буферов.
Метод следует вызывать после завершения работы
с gzip-ридером для предотвращения утечек ресурсов.
Синтаксис
err := r.Close()
Метод не принимает параметров и возвращает ошибку, если в процессе закрытия возникли проблемы.
Пример
Давайте создадим gzip-ридер, прочитаем из него данные
и закроем его с помощью метода Close:
package main
import (
"bytes"
"compress/gzip"
"fmt"
"io"
)
func main() {
// Создаем сжатые данные
var buf bytes.Buffer
gw := gzip.NewWriter(&buf)
gw.Write([]byte("Hello, World!"))
gw.Close()
// Создаем ридер для сжатых данных
gr, err := gzip.NewReader(&buf)
if err != nil {
fmt.Println("Error creating reader:", err)
return
}
defer gr.Close()
// Читаем данные
data, err := io.ReadAll(gr)
if err != nil {
fmt.Println("Error reading data:", err)
return
}
fmt.Printf("Read data: %s\n", string(data))
}
Результат выполнения кода:
"Read data: Hello, World!"
Пример
Используем defer для автоматического закрытия
gzip-ридера, чтобы гарантировать освобождение ресурсов
даже в случае возникновения ошибок:
package main
import (
"bytes"
"compress/gzip"
"fmt"
"io"
)
func readGzipData(data []byte) (string, error) {
reader := bytes.NewReader(data)
gr, err := gzip.NewReader(reader)
if err != nil {
return "", err
}
defer gr.Close()
result, err := io.ReadAll(gr)
if err != nil {
return "", err
}
return string(result), nil
}
func main() {
// Создаем сжатые данные
var buf bytes.Buffer
gw := gzip.NewWriter(&buf)
gw.Write([]byte("Test data"))
gw.Close()
// Читаем данные с автоматическим закрытием
res, err := readGzipData(buf.Bytes())
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(res)
}
Результат выполнения кода:
"Test data"
Смотрите также
-
конструктор
gzip.NewReader,
который создает новый gzip-ридер -
тип
gzip.Reader,
представляющий ридер для gzip-архивов -
метод
gzip.Writer.Close,
который закрывает gzip-врайтер -
метод
gzip.Writer.Flush,
который сбрасывает буфер в выходной поток