В языке программирования Go для сжатия файлов существует пакет compress
с подпакетами gzip
, flate
и zlib
, которые предоставляют функциональность для работы с различными алгоритмами сжатия.
Одним из самых популярных алгоритмов сжатия в Go является алгоритм Gzip. Для сжатия файла можно воспользоваться функцией gzip.NewWriter
. Вот пример кода, который сжимает содержимое файла input.txt
и записывает его в файл compressed.txt.gz
:
package main import ( "compress/gzip" "io" "os" ) func main() { inputFile, err := os.Open("input.txt") if err != nil { panic(err) } defer inputFile.Close() outputFile, err := os.Create("compressed.txt.gz") if err != nil { panic(err) } defer outputFile.Close() gzipWriter := gzip.NewWriter(outputFile) defer gzipWriter.Close() _, err = io.Copy(gzipWriter, inputFile) if err != nil { panic(err) } }
Здесь мы открываем файл input.txt
для чтения и файл compressed.txt.gz
для записи. Затем мы создаем gzip.Writer
, который предоставляет возможность сжатия данных, и оборачиваем его в io.Copy
, чтобы копировать содержимое inputFile
в gzipWriter
. Это приведет к сжатию данных и их записи в outputFile
.
Если вы хотите использовать другой алгоритм сжатия, например, алгоритм Deflate, можно воспользоваться подпакетом flate
. Вот пример, который демонстрирует сжатие файла с использованием алгоритма Deflate:
package main import ( "compress/flate" "io" "os" ) func main() { inputFile, err := os.Open("input.txt") if err != nil { panic(err) } defer inputFile.Close() outputFile, err := os.Create("compressed.txt") if err != nil { panic(err) } defer outputFile.Close() flateWriter, err := flate.NewWriter(outputFile, flate.DefaultCompression) if err != nil { panic(err) } defer flateWriter.Close() _, err = io.Copy(flateWriter, inputFile) if err != nil { panic(err) } }
Здесь мы используем функцию flate.NewWriter
, чтобы создать flate.Writer
с заданным уровнем сжатия flate.DefaultCompression
. Затем мы копируем содержимое inputFile
в flateWriter
, что приводит к сжатию данных и их записи в outputFile
.
В отличие от алгоритма Gzip, алгоритм Deflate не поддерживает напрямую запись сжатых данных в архивный файл.