Архивите обединяват няколко файла заедно в един формат, обикновено zip, tar или rar. Архивните файлове могат също да използват компресия, за да намалят общия размер на файла.
Можете да използвате архиви за разпространение на софтуер и данни, включително уеб страници. Можете също така да архивирате вашето приложение, с всички негови файлове и зависимости, за да могат потребителите да изтеглят и инсталират.
Архивният пакет на Go ви позволява да създавате и извличате архиви във формати tar и zip.
Архивиран пакет на Go
Go предоставя архив пакети за работа с различни архивни формати. Можете да използвате цип и катран пакети за създаване, четене и запис на архивни файлове в тези формати. И двата пакета поддържат различни алгоритми за компресиране чрез лесен за използване API.
Ето как можете да импортирате zip и tar пакетите във вашите Go файлове:
импортиране (
"архив/цип"
"архив/tar"
)
След като импортирате пакетите, можете да ги използвате за създаване и манипулиране на архивни файлове.
Създаване и добавяне на файлове към Tar архиви
The катран пакетът работи с tar архиви във формати tar и tar.gz, включително поддръжка за четене и писане на файлове с PAX разширени хедъри.
Пакетът tar предоставя a NewWriter функция за създаване на нови tar архиви. NewWriter приема an io. Писател интерфейсен екземпляр, който може да бъде файл или буфер на паметта и връща указател към катран. Писател структура
пакет основен
импортиране (
"архив/tar"
"операционна система"
)функосновен() {
// Създаване на нов файл
файл, _ := os. Създаване ("myarchive.tar")
отлагам файл. Близо()
// Създаване на нов tar архив
tarWriter := tar. NewWriter (файл)
отлагам tarWriter. Близо()
}
The Създавайте функция на операционна система package създава нов tar файл. The катран. NewWriter функцията приема файл и създава нов архив.
Можете да добавяте файлове към tar архива с WriteHeader и Пишете функции. Функцията WriteHeader приема a катран. Заглавка структура като аргумент. Това съдържа метаданните на файла, като името на файла, размера и битовете за разрешение. Функцията Write записва съдържанието на файл в архива.
импортиране (
"архив/tar"
"fmt"
"йо"
"дневник"
"операционна система"
)функосновен() {
// Създаване на нов файл
файл, _ := os. Създаване ("myarchive.tar")
файл, _ = os. Създаване ("message.txt")
отлагам файл. Близо()// Създаване на нов tar архив
tarWriter := tar. NewWriter (файл)
отлагам tarWriter. Близо()
// Добавяне на файл към архива
fileToAdd, _ := os. отворено("файл1.txt")
отлагам fileToAdd. Близо()
fileInfo, _ := fileToAdd. Статистика()
заглавка, _ := tar. FileInfoHeader (fileInfo, "")
tarWriter. WriteHeader (заглавка)
_, _ = io. Копиране (tarWriter, fileToAdd)
fmt. Println(„Операцията за архивиране на TAR приключи“)
}
Програмата създава нови tar и текстови файлове с Създавайте функция на операционна система пакет и нов tar архив с NewWriter, преди да добавите файла към архива.
The Отворете отваря файла за добавяне към архива. Имайте предвид, че ще ви трябва файл с име file1.txt във вашата работна директория, за да стартирате тази програма успешно.
Можете да използвате статистика функция на екземпляр на файл за извличане на метаданните, които ще ви трябват за заглавката на tar. Предайте резултата му на FileInfoHeader, след това предайте този резултат на WriteHeader функция за настройка на tar файла. Накрая копирайте файла в архива с помощта на io. копие.
Извличане на файлове от Tar архиви
Можете да използвате NewReader функция за четене на съдържанието на архивния файл tar. Функцията NewReader приема an io. Читател интерфейс, който може да бъде файл или буфер на паметта. Връща указател към a катран. Читател структура
импортиране (
"архив/tar"
"йо"
"операционна система"
)функосновен() {
// Отворете tar архива
файл, _ := os. отворено("myarchive.tar")
отлагам файл. Близо()// Създаване на нов tar четец
tarReader := tar. NewReader (файл)// Обхождане на файловете в архива
за {
заглавка, грешка := tarReader. Следващия()ако грешка == io. EOF {
прекъсвам
}
// Извличане на файла
outFile, _ := os. Създаване (заглавие. Име)
отлагам outFile. Близо()
_, _ = io. Копиране (outFile, tarReader)
}
}
The безкраен for цикъл преминава през екземпляра на tar reader и извлича файловете, като копира всеки файл с io пакет копие функция.
Създаване и добавяне на файлове към Zip архиви
Можете да създадете нов zip архив с NewWriter функция на цип пакет. Функцията NewWriter приема екземпляр на файл и връща zip записващо устройство.
импортиране (
"архив/цип"
"операционна система"
)функосновен() {
// Създаване на нов файл
файл, грешка := os. Създаване ("archive.zip")ако грешка!= нула {
паника(грешка)
}отлагам файл. Близо()
// Създаване на нов zip записващ файл
zipWriter := zip. NewWriter (файл)
отлагам zipWriter. Близо()
}
The zipWriter променливата съхранява нов Писател екземпляр, който NewWriter връща.
Можете да добавяте файлове към вашите zip архиви с Създавайте функция на екземпляра на Writer. Функцията Create приема името на файла. Можете също да използвате Пишете функция на екземпляра на zip файла за запис на данни във файлове в zip архиви.
импортиране (
"архив/цип"
"операционна система"
)функосновен() {
// Създаване на нови файлове
файл, грешка := os. Създаване ("archive.zip")
файл, грешка = os. Създаване ("файл1.txt")
файл, грешка = os. Създаване ("файл2.txt")ако грешка!= нула {
паника(грешка)
}отлагам файл. Близо()
// Създаване на нов zip записващ файл
zipWriter := zip. NewWriter (файл)
отлагам zipWriter. Близо()// Добавяне на файлове към архива
файл1, грешка := zipWriter. Създаване ("файл1.txt")ако грешка!= нула {
паника(грешка)
}файл2, грешка := zipWriter. Създаване ("файл2.txt")
ако грешка!= нула {
паника(грешка)
}
// Записване на данни във файловете в архива
file1.Write([]байт("Здравей свят!"))
file2.Write([]байт(„Сбогом, свят!“))
fmt. Println("операцията по архивиране на zip приключи")
}
Основната функция започва с използване Създавайте за създаване на нов zip файл и два текстови файла. След това създава два писателя, за да добави двата текстови файла към архива. The Пишете функция на всеки екземпляр на файл пише съобщения във всеки от файловете в архива.
Извличане на файлове от Zip архиви
Можете да извлечете съществуващ zip файл, като го прочетете с OpenReader функция, след което преминава през съдържанието й и копира файлове с io пакет.
импортиране (
"архив/цип"
"fmt"
"йо"
"операционна система"
)функосновен() {
// Отворете архива
zipReader, грешка := zip. OpenReader("archive.zip")ако грешка!= нула {
паника(грешка)
}отлагам zipReader. Близо()
// Извличане на файлове от архива
за _, файл := диапазон zipReader. файл {
zipFile, грешка := файл. отворено()ако грешка!= нула {
паника(грешка)
}отлагам zipFile. Близо()
// Създайте нов файл със същото име като компресирания файл
извлечен файл, грешка := os. Създайте (файл. Име)ако грешка!= нула {
паника(грешка)
}отлагам извлечен файл. Близо()
// Копирайте данните от компресирания файл в новия файл
_, грешка = io. Копиране (extractedFile, zipFile)ако грешка!= нула {
паника(грешка)
}
fmt. Printf(„Извлечено %s\n“, файл. Име)
}
}
The OpenReader функция чете zip архиви. The OpenReader функцията приема името на zip файла като аргумент и връща екземпляр на четец на zip файл. The за-обхват цикъл преминава през съдържанието на файловете в екземпляра на четеца. Той създава нов файл със същото име като оригиналния файл и копира съдържанието на извлечения файл в новия файл с помощта на io. копие функция.
Разархивирайте ръчно или програмно - зависи от вас
Програмното разархивиране на файлове е удобно, ако имате много файлове или архиви за разархивиране. Може също да интегрирате функцията за архивиране в основното си приложение.
В други случаи може да е по-добре да използвате съществуващи приложения. Можете да използвате вградени приложения или приложения на трети страни, за да разархивирате архиви в Windows, macOS и Linux.