溫馨提示×

Go語言數(shù)據(jù)壓縮與解壓縮怎么實現(xiàn)

小億
82
2024-11-10 07:38:23
欄目: 編程語言

在Go語言中,可以使用標準庫中的"compress/gzip"和"io/ioutil"包來實現(xiàn)數(shù)據(jù)的壓縮和解壓縮。下面是一個簡單的示例,展示了如何使用這些包進行ZIP文件的壓縮和解壓縮。

  1. 導入所需的包:
import (
	"archive/zip"
	"compress/gzip"
	"io/ioutil"
	"log"
)
  1. 壓縮文件:
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
}
  1. 解壓縮文件:
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
}
  1. 使用示例:
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ù)以適應其他壓縮格式。

0