Функция 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,
позволяющую задать уровень сжатия