[go] go 언어에서의 데이터 압축 및 압축 해제를 위한 os 패키지 활용

Go 언어에서 파일을 압축하고 해제하는 작업은 매우 중요합니다. 이러한 작업을 수행하기 위해 Go 표준 라이브러리의 os 패키지를 사용할 수 있습니다. 이 블로그 게시물에서는 Go에서 파일 압축 및 압축 해제를 수행하기 위한 방법을 알아보겠습니다.

1. 파일 압축하기

파일을 압축할 때, archive/zip 패키지를 사용하여 새로운 .zip 파일을 생성할 수 있습니다.

package main

import (
	"archive/zip"
	"log"
	"os"
)

func main() {
	// 압축할 파일 목록
	files := []string{"file1.txt", "file2.txt", "file3.txt"}

	// zip 파일 생성
	zipfile, err := os.Create("files.zip")
	if err != nil {
		log.Fatal(err)
	}
	defer zipfile.Close()

	// zip writer 생성
	zipWriter := zip.NewWriter(zipfile)
	defer zipWriter.Close()

	// 파일을 압축
	for _, file := range files {
		err = addFileToZip(zipWriter, file)
		if err != nil {
			log.Fatal(err)
		}
	}
}

func addFileToZip(zipWriter *zip.Writer, filename string) error {
	fileToZip, err := os.Open(filename)
	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.Name = filename
	header.Method = zip.Deflate

	// 파일을 zip 파일에 추가
	writer, err := zipWriter.CreateHeader(header)
	if err != nil {
		return err
	}
	_, err = io.Copy(writer, fileToZip)
	return err
}

위의 예제에서는 file1.txt, file2.txt, file3.txt 파일을 files.zip이라는 한 개의 .zip 파일로 압축하는 예시를 보여주고 있습니다.

2. 파일 압축 해제하기

archive/zip 패키지를 사용하여 .zip 파일을 압축 해제할 수 있습니다.

package main

import (
	"archive/zip"
	"log"
	"os"
)

func main() {
	// 압축 해제할 zip 파일
	zipfile, err := zip.OpenReader("files.zip")
	if err != nil {
		log.Fatal(err)
	}
	defer zipfile.Close()

	for _, file := range zipfile.File {
		// 파일 압축 해제
		err = extractFile(file)
		if err != nil {
			log.Println(err)
		}
	}
}

func extractFile(file *zip.File) error {
	// 압축 해제
	reader, err := file.Open()
	if err != nil {
		return err
	}
	defer reader.Close()

	// 압축을 해제한 파일 생성
	newFile, err := os.Create(file.Name)
	if err != nil {
		return err
	}
	defer newFile.Close()

	// 압축을 해제한 파일을 새로 생성한 파일에 복사
	_, err = io.Copy(newFile, reader)
	if err != nil {
		return err
	}
	return nil
}

위의 예제에서는 files.zip이라는 .zip 파일을 압축 해제하는 방법을 보여주고 있습니다.

이처럼 Go 언어에서는 os 패키지를 이용하여 파일을 압축 및 압축 해제할 수 있습니다.

결론

이 블로그 게시물에서는 Go 언어에서 파일을 압축하고 압축을 해제하는 방법을 알아보았습니다. os 패키지를 사용하면 간단하고 쉽게 파일을 압축하고 압축을 해제할 수 있습니다. 이를 통해 파일 처리 작업을 보다 효율적으로 수행할 수 있습니다.

참고 자료