[go] 파일 압축

Go 언어는 간단하고 효율적인 파일 압축을 위한 표준 라이브러리를 제공합니다. 이를 사용하여 파일을 압축하고 해제할 수 있습니다. 이번 포스트에서는 Go 언어를 사용하여 파일을 압축하는 방법에 대해 알아보겠습니다.

파일 압축하기

Go 언어에서 파일을 압축하기 위해서는 archive/zip 패키지를 사용합니다. 아래는 파일을 압축하는 예제 코드입니다.

package main

import (
	"archive/zip"
	"fmt"
	"io"
	"os"
)

func main() {
    fileToCompress, err := os.Open("file.txt")
    if err != nil {
        panic(err)
    }
    defer fileToCompress.Close()

    output, err := os.Create("compressed.zip")
    if err != nil {
        panic(err)
    }
    defer output.Close()

    zipWriter := zip.NewWriter(output)
    defer zipWriter.Close()

    fileInfo, err := fileToCompress.Stat()
    if err != nil {
        panic(err)
    }

    header, err := zip.FileInfoHeader(fileInfo)
    if err != nil {
        panic(err)
    }

    header.Name = fileToCompress.Name()
    writer, err := zipWriter.CreateHeader(header)
    if err != nil {
        panic(err)
    }
    io.Copy(writer, fileToCompress)

    fmt.Println("File compressed successfully")
}

위의 코드는 file.txt 파일을 compressed.zip으로 압축하는 예제입니다.

파일 해제하기

위에서 압축한 파일을 해제하는 방법은 아래와 같습니다.

package main

import (
	"archive/zip"
	"fmt"
	"io"
	"os"
)

func main() {
    zipFile, err := zip.OpenReader("compressed.zip")
    if err != nil {
        panic(err)
    }
    defer zipFile.Close()

    for _, file := range zipFile.File {
        zippedFile, err := file.Open()
        if err != nil {
            panic(err)
        }
        defer zippedFile.Close()

        targetFile, err := os.Create(file.Name)
        if err != nil {
            panic(err)
        }
        defer targetFile.Close()

        _, err = io.Copy(targetFile, zippedFile)
        if err != nil {
            panic(err)
        }
    }

    fmt.Println("File decompressed successfully")
}

위의 코드는 compressed.zip 파일을 해제하여 원본 파일을 복원하는 예제입니다.

이렇게 간단하게 Go 언어를 사용하여 파일을 압축하고 해제할 수 있습니다. Go 언어의 강력한 표준 라이브러리를 이용하여 파일 압축과 해제를 쉽게 수행할 수 있습니다.

참고 자료