Функция gzip.NewWriterLevel

Функция gzip.NewWriterLevel создает новый gzip.Writer, который сжимает данные в формат GZIP. В первый параметр передается объект, реализующий интерфейс io.Writer, куда будет записан сжатый вывод, во второй параметр передается уровень сжатия, который может быть одним из предопределенных значений: gzip.BestCompression, gzip.BestSpeed, gzip.DefaultCompression или gzip.NoCompression. Функция возвращает указатель на gzip.Writer и ошибку, если уровень сжатия недопустим.

Синтаксис

gofunc gzip.NewWriterLevel(w io.Writer, level int) (*gzip.Writer, error)

Пример с уровнем BestSpeed

Давайте создадим GZIP-компрессор с уровнем сжатия BestSpeed и сожмем строку:

gopackage main

import (
  "bytes"
  "compress/gzip"
  "fmt"
)

func main() {
  var buf bytes.Buffer
  w, err := gzip.NewWriterLevel(&buf, gzip.BestSpeed)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  defer w.Close()
  
  data := []byte("Hello, World! This is a test string for compression.")
  _, err = w.Write(data)
  if err != nil {
    fmt.Println("Error writing:", err)
    return
  }
  err = w.Close()
  if err != nil {
    fmt.Println("Error closing:", err)
    return
  }
  
  fmt.Printf("Compressed data size: %d bytes", buf.Len())
}

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

go"Compressed data size: 89 bytes"

Пример с уровнем BestCompression

Давайте создадим GZIP-компрессор с максимальным уровнем сжатия BestCompression для сжатия данных:

gopackage main

import (
  "bytes"
  "compress/gzip"
  "fmt"
)

func main() {
  var buf bytes.Buffer
  w, err := gzip.NewWriterLevel(&buf, gzip.BestCompression)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  defer w.Close()
  
  data := []byte("Hello, World! This is a test string for compression.")
  _, err = w.Write(data)
  if err != nil {
    fmt.Println("Error writing:", err)
    return
  }
  err = w.Close()
  if err != nil {
    fmt.Println("Error closing:", err)
    return
  }
  
  fmt.Printf("Compressed data size: %d bytes", buf.Len())
}

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

go"Compressed data size: 83 bytes"

Пример с обработкой ошибки

Давайте попробуем создать компрессор с недопустимым уровнем сжатия и обработаем ошибку:

gopackage main

import (
  "bytes"
  "compress/gzip"
  "fmt"
)

func main() {
  var buf bytes.Buffer
  w, err := gzip.NewWriterLevel(&buf, 99)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  defer w.Close()
  
  fmt.Println("Writer created successfully")
}

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

go"Error: gzip: invalid compression level: 99"

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

  • функцию gzip.NewWriter,
    которая создает GZIP-компрессор с уровнем по умолчанию
  • функцию gzip.NewReader,
    которая создает GZIP-распаковщик для чтения данных
  • константу gzip.BestCompression,
    которая задает максимальный уровень сжатия
  • константу gzip.BestSpeed,
    которая задает минимальный уровень сжатия