РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1309 of 1593 menu

Функция gzip.NewWriter

Функция gzip.NewWriter создает новый объект gzip.Writer, который сжимает данные, записываемые в него, в формат gzip. В качестве единственного параметра она принимает объект, реализующий интерфейс io.Writer - обычно это файл или сетевой сокет, в который будет записан сжатый поток. Возвращаемое значение - указатель на gzip.Writer, который используется для записи несжатых данных. После завершения работы с writer его необходимо закрыть методом Close, чтобы записать финальный блок gzip и освободить ресурсы.

Синтаксис

func NewWriter(w io.Writer) *gzip.Writer

Пример

Давайте сожмем строку "hello, world!" с помощью gzip.NewWriter и запишем результат в буфер:

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 { panic(err) } err = gz.Close() if err != nil { panic(err) } fmt.Printf("Сжатые данные: %x\n", buf.Bytes()) }

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

"Сжатые данные: 1f8b08000000000000ff..."

Пример

Теперь запишем сжатые данные в файл. Обратите внимание, что после записи необходимо вызвать Close для корректного завершения:

package main import ( "compress/gzip" "os" ) func main() { file, err := os.Create("example.gz") if err != nil { panic(err) } defer file.Close() gz := gzip.NewWriter(file) defer gz.Close() _, err = gz.Write([]byte("hello, world!")) if err != nil { panic(err) } }

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

"" // Файл example.gz создан, ошибок нет

Пример

Также можно использовать gzip.NewWriter для сжатия с последующей записью в сетевой сокет или любой другой потоковый вывод. Важно всегда проверять ошибки после записи:

package main import ( "bytes" "compress/gzip" "fmt" ) func main() { var buf bytes.Buffer gz := gzip.NewWriter(&buf) data := []string{"abcde", "12345", "xyz"} for _, s := range data { _, err := gz.Write([]byte(s)) if err != nil { fmt.Println("Error writing:", err) return } } err := gz.Close() if err != nil { fmt.Println("Error closing:", err) return } fmt.Printf("Compressed size: %d bytes", buf.Len()) }

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

"Compressed size: 23 bytes"

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

  • функцию gzip.NewReader,
    которая создает reader для распаковки gzip-данных
  • метод gzip.Writer.Close,
    который завершает запись gzip-потока
  • константу gzip.BestCompression,
    используемую для выбора уровня сжатия
  • функцию gzip.NewWriterLevel,
    позволяющую задать уровень сжатия
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить