Метод gzip.Reader.Close

Метод gzip.Reader.Close закрывает ридер, освобождая все ресурсы, связанные с ним. Это включает закрытие базового io.Reader, а также освобождение внутренних буферов. Метод следует вызывать после завершения работы с gzip-ридером для предотвращения утечек ресурсов.

Синтаксис

goerr := r.Close()

Метод не принимает параметров и возвращает ошибку, если в процессе закрытия возникли проблемы.

Пример

Давайте создадим gzip-ридер, прочитаем из него данные и закроем его с помощью метода Close:

gopackage 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))
}

Результат выполнения кода:

go"Read data: Hello, World!"

Пример

Используем defer для автоматического закрытия gzip-ридера, чтобы гарантировать освобождение ресурсов даже в случае возникновения ошибок:

gopackage 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)
}

Результат выполнения кода:

go"Test data"

Смотрите также

  • конструктор gzip.NewReader,
    который создает новый gzip-ридер
  • тип gzip.Reader,
    представляющий ридер для gzip-архивов
  • метод gzip.Writer.Close,
    который закрывает gzip-врайтер
  • метод gzip.Writer.Flush,
    который сбрасывает буфер в выходной поток