在Go語言中,可以使用標準庫中的"compress/gzip"和"io/ioutil"包來實現(xiàn)數(shù)據(jù)的壓縮和解壓縮。下面是一個簡單的示例,展示了如何使用這些包進行ZIP文件的壓縮和解壓縮。
import (
"archive/zip"
"compress/gzip"
"io/ioutil"
"log"
)
func compressFile(sourcePath, destinationPath string) error {
// 打開源文件
sourceFile, err := os.Open(sourcePath)
if err != nil {
return err
}
defer sourceFile.Close()
// 創(chuàng)建一個新的ZIP文件
destinationFile, err := os.Create(destinationPath)
if err != nil {
return err
}
defer destinationFile.Close()
// 創(chuàng)建一個ZIP writer
zipWriter := zip.NewWriter(destinationFile)
defer zipWriter.Close()
// 將源文件添加到ZIP文件中
fileToZip, err := os.Open(sourcePath)
if err != nil {
return err
}
defer fileToZip.Close()
info, err := fileToZip.Stat()
if err != nil {
return err
}
header, err := zip.FileInfoHeader(info)
if err != nil {
return err
}
header.Method = zip.Deflate
writer, err := zipWriter.CreateHeader(header)
if err != nil {
return err
}
_, err = io.Copy(writer, fileToZip)
if err != nil {
return err
}
return nil
}
func decompressFile(zipPath, destinationPath string) error {
// 打開ZIP文件
zipFile, err := zip.OpenReader(zipPath)
if err != nil {
return err
}
defer zipFile.Close()
for _, file := range zipFile.File {
// 創(chuàng)建目標文件
destinationFile, err := os.Create(filepath.Join(destinationPath, file.Name))
if err != nil {
return err
}
defer destinationFile.Close()
// 解壓縮文件到目標文件
reader, err := file.Open()
if err != nil {
return err
}
defer reader.Close()
_, err = io.Copy(destinationFile, reader)
if err != nil {
return err
}
}
return nil
}
func main() {
sourcePath := "example.txt"
destinationPath := "example.zip"
// 壓縮文件
err := compressFile(sourcePath, destinationPath)
if err != nil {
log.Fatalf("Error compressing file: %v", err)
}
// 解壓縮文件
err = decompressFile(destinationPath, "extracted")
if err != nil {
log.Fatalf("Error decompressing file: %v", err)
}
}
這個示例展示了如何使用Go語言的標準庫進行ZIP文件的壓縮和解壓縮。你可以根據(jù)需要修改這些函數(shù)以適應其他壓縮格式。