Go 언어 zip 파일 압축 배워보기

오늘은 Go 언어 기본 패키지에 포함되있는 archive/zip을 이용하여 압축파일을 생성해보려 합니다.

package main

import (
	"archive/zip"
	"path/filepath"
	"io"
	"os"
)

우선 archive/zip 패키지와 파일 경로를 탐색하기 위해 path/filepath 패키지도 가져옵니다.

io와 os 패키지로 파일을 핸들링할 예정이므로 이 두 패키지도 가져와줍니다.

func main() {
	file, _ := os.Create("./test.zip")
	defer file.Close()
	archive := zip.NewWriter(file)
	defer archive.Close()

파일과 zip writer 객체도 생성해주고, defer 키워드로 작업이 끝나면 닫아주게 예약해둡니다.

	filepath.Walk("./db.csv", 
	func(path string, name os.FileInfo, _ error) error {

Walk 함수로 주어진 내부의 모든 경로 트리를 순회하도록 하면서, 오류 값을 반환으로 하는 익명의 WalkFunc 함수도 같이 인자로 받습니다.

		header, _ := zip.FileInfoHeader(name)
		header.Method = zip.Deflate
		writer, _ := archive.CreateHeader(header)

zip 파일의 헤더를 작성해줍니다.

		file, error := os.Open(path)
		defer file.Close()
		io.Copy(writer, file)
		return error
	})
}

마지막으로 해당 파일의 경로를 열고 io 패키지를 이용하여 writer로 복사해줍니다.

Written on October 16, 2018