Arkiv buntar ihop flera filer till ett enda format, vanligtvis zip, tar eller rar. Arkivfiler kan också använda komprimering för att minska den totala filstorleken.
Du kan använda arkiv för att distribuera programvara och data, inklusive webbsidor. Du kan också arkivera din applikation, med alla dess filer och beroenden, för användare att ladda ner och installera.
Go’s arkivpaket låter dig skapa och extrahera arkiv i tar- och zip-format.
Go’s arkivpaket
Go ger arkiv paket för att arbeta med olika arkivformat. Du kan använda blixtlås och tjära paket för att skapa, läsa och skriva arkivfiler i dessa format. Båda paketen stöder olika komprimeringsalgoritmer över ett lättanvänt API.
Så här kan du importera zip- och tar-paketen i dina Go-filer:
importera (
"arkiv/zip"
"arkiv/tjära"
)
Efter att ha importerat paketen kan du använda dem för att skapa och manipulera arkivfiler.
Skapa och lägga till filer till Tar-arkiv
De tjära paketet fungerar med tjära arkiv med tar- och tar.gz-format, inklusive stöd för att läsa och skriva filer med utökade PAX-huvuden.
Tjärpaketet ger en NewWriter funktion för att skapa nya tar-arkiv. NewWriter tar in en io. Författare gränssnittsinstans som kan vara en fil eller minnesbuffert och returnerar en pekare till tjära. Författare struktur.
paket huvud
importera (
"arkiv/tjära"
"os"
)funchuvud() {
// Skapa en ny fil
fil, _ := os. Skapa("myarchive.tar")
uppskjuta fil. Stänga()
// Skapa ett nytt tar-arkiv
tarWriter := tar. NewWriter (fil)
uppskjuta tarWriter. Stänga()
}
De Skapa funktion av os paketet skapar en ny tar-fil. De tjära. NewWriter funktionen tar in en fil och skapar ett nytt arkiv.
Du kan lägga till filer i tar-arkivet med WriteHeader och Skriva funktioner. WriteHeader-funktionen tar en tjära. Rubrik struktur som ett argument. Den innehåller filens metadata, såsom filnamn, storlek och behörighetsbitar. Skrivfunktionen skriver innehållet i en fil till arkivet.
importera (
"arkiv/tjära"
"fmt"
"io"
"logga"
"os"
)funchuvud() {
// Skapa en ny fil
fil, _ := os. Skapa("myarchive.tar")
fil, _ = os. Skapa("meddelande.txt")
uppskjuta fil. Stänga()// Skapa ett nytt tar-arkiv
tarWriter := tar. NewWriter (fil)
uppskjuta tarWriter. Stänga()
// Lägg till en fil i arkivet
fileToAdd, _ := os. Öppen("fil1.txt")
uppskjuta fileToAdd. Stänga()
fileInfo, _ := fileToAdd. Statistik()
rubrik, _ := tar. FileInfoHeader (fileInfo, "")
tarWriter. WriteHeader (header)
_, _ = io. Kopiera (tarWriter, fileToAdd)
fmt. Println("TAR-arkivoperation slutförd")
}
Programmet skapar nya tar- och textfiler med Skapa funktion av os paket och ett nytt tjärarkiv med NewWriter, innan du lägger till filen i arkivet.
De Öppen funktionen öppnar filen som ska läggas till i arkivet. Observera att du behöver en fil med namnet fil1.txt i din arbetskatalog för att köra det här programmet framgångsrikt.
Du kan använda statistik funktion av en filinstans för att hämta metadata du behöver för tar-huvudet. Skicka resultatet till FileInfoHeader, skicka sedan det resultatet till WriteHeader funktion för att ställa in tar-filen. Slutligen, kopiera filen till arkivet med hjälp av io. Kopiera.
Extrahera filer från Tar-arkiv
Du kan använda NewReader funktion för att läsa innehållet i tar-arkivfilen. NewReader-funktionen tar in en io. Läsare gränssnitt som kan vara en fil eller en minnesbuffert. Den returnerar en pekare till a tjära. Läsare struktur.
importera (
"arkiv/tjära"
"io"
"os"
)funchuvud() {
// Öppna tar-arkivet
fil, _ := os. Öppen("myarchive.tar")
uppskjuta fil. Stänga()// Skapa en ny tar-läsare
tarReader := tar. NewReader (fil)// Iterera över filerna i arkivet
för {
header, err := tarReader. Nästa()om fel == io. EOF {
ha sönder
}
// Extrahera filen
outFile, _ := os. Skapa (huvud. Namn)
uppskjuta outFile. Stänga()
_, _ = io. Kopiera (outFile, tarReader)
}
}
De oändlig för loop går igenom tar-läsarinstansen och extraherar filerna genom att kopiera varje fil med io paketets Kopiera fungera.
Skapa och lägga till filer till zip-arkiv
Du kan skapa ett nytt zip-arkiv med NewWriter funktion av blixtlås paket. NewWriter-funktionen tar in en filinstans och returnerar en zip-skrivare.
importera (
"arkiv/zip"
"os"
)funchuvud() {
// Skapa en ny fil
fil, fel := os. Skapa("archive.zip")om fel!= noll {
panik(fela)
}uppskjuta fil. Stänga()
// Skapa en ny zip-skrivare
zipWriter := zip. NewWriter (fil)
uppskjuta zipWriter. Stänga()
}
De zipWriter variabel lagrar en ny Författare instans som NewWriter returnerar.
Du kan lägga till filer till dina zip-arkiv med Skapa funktionen för Writer-instansen. Skapa-funktionen tar in filnamnet. Du kan också använda Skriva funktionen hos zip-filinstansen för att skriva data till filer i zip-arkiv.
importera (
"arkiv/zip"
"os"
)funchuvud() {
// Skapa nya filer
fil, fel := os. Skapa("archive.zip")
fil, err = os. Skapa("fil1.txt")
fil, err = os. Skapa("fil2.txt")om fel!= noll {
panik(fela)
}uppskjuta fil. Stänga()
// Skapa en ny zip-skrivare
zipWriter := zip. NewWriter (fil)
uppskjuta zipWriter. Stänga()// Lägg till filer i arkivet
fil1, fel := zipWriter. Skapa("fil1.txt")om fel!= noll {
panik(fela)
}fil2, fel := zipWriter. Skapa("fil2.txt")
om fel!= noll {
panik(fela)
}
// Skriv data till filerna i arkivet
fil1.Skriv([]byte("Hej världen!"))
fil2.Skriv([]byte("Hejdå världen!"))
fmt. Println("zip-arkivering har slutförts")
}
Huvudfunktionen börjar med att använda Skapa för att skapa en ny zip-fil och två textfiler. Den skapar sedan två Writers för att lägga till de två textfilerna till arkivet. De Skriva funktion för varje filinstans skriver meddelanden till var och en av filerna i arkivet.
Extrahera filer från zip-arkiv
Du kan extrahera en befintlig zip-fil genom att läsa den med ÖppnaReader funktionen, gå sedan igenom dess innehåll och kopiera filer med io paket.
importera (
"arkiv/zip"
"fmt"
"io"
"os"
)funchuvud() {
// Öppna arkivet
zipReader, fel := zip. OpenReader("archive.zip")om fel!= noll {
panik(fela)
}uppskjuta zipReader. Stänga()
// Extrahera filer från arkivet
för _, fil := räckvidd zipReader. Fil {
zippedFile, fel := fil. Öppen()om fel!= noll {
panik(fela)
}uppskjuta zippad fil. Stänga()
// Skapa en ny fil med samma namn som den zippade filen
extraherad fil, fel := os. Skapa (fil. Namn)om fel!= noll {
panik(fela)
}uppskjuta extraherad fil. Stänga()
// Kopiera data från den zippade filen till den nya filen
_, fel = io. Kopiera (extractedFile, zippedFile)om fel!= noll {
panik(fela)
}
fmt. Printf("Extraherade %s\n", fil. Namn)
}
}
De ÖppnaReader funktionen läser zip-arkiv. De ÖppnaReader funktionen accepterar zip-filnamnet som ett argument och returnerar en zip-filläsarinstans. De för-räckvidd loop går igenom innehållet i filerna i läsarinstansen. Den skapar en ny fil med samma namn som originalfilen och kopierar innehållet i den extraherade filen till den nya filen med io. Kopiera fungera.
Packa upp manuellt eller programmerat – det är upp till dig
Att packa upp filer programmatiskt är bekvämt om du har många filer eller arkiv att packa upp. Du kanske också integrerar arkivfunktioner i din huvudapp.
I andra fall kan det vara bättre att använda befintliga applikationer. Du kan använda inbyggda appar eller appar från tredje part för att packa upp arkiv på Windows, macOS och Linux.