[go] Go 언어의 경로를 이용한 파일 및 디렉토리 압축
  1. 개요
  2. 파일 및 디렉토리 압축하기
  3. 파일 및 디렉토리 압축 해제하기
  4. 결론

1. 개요

Go 언어를 사용하여 파일과 디렉토리를 압축하고 해제하는 방법을 배우겠습니다. archive/zip 패키지와 os 패키지를 사용하여 파일과 디렉토리를 압축하고 해제할 수 있습니다.

2. 파일 및 디렉토리 압축하기

아래의 예제 코드는 Go를 사용하여 파일 및 디렉토리를 압축하는 방법을 보여줍니다.

package main

import (
    "archive/zip"
    "os"
)

func main() {
    fileToZip := "file.txt"
    zipFile, err := os.Create("file.zip")
    if err != nil {
        panic(err)
    }
    defer zipFile.Close()

    archive := zip.NewWriter(zipFile)
    defer archive.Close()

    file, err := os.Open(fileToZip)
    if err != nil {
        panic(err)
    }
    defer file.Close()

    info, err := file.Stat()
    if err != nil {
        panic(err)
    }
    header, err := zip.FileInfoHeader(info)
    if err != nil {
        panic(err)
    }
    header.Method = zip.Deflate
    writer, err := archive.CreateHeader(header)
    if err != nil {
        panic(err)
    }
    _, err = io.Copy(writer, file)
    if err != nil {
        panic(err)
    }
}

위의 코드는 하나의 파일을 압축하는 예제이지만, 여러 파일을 동시에 압축할 수도 있습니다.

3. 파일 및 디렉토리 압축 해제하기

Go를 사용하여 압축된 파일이나 디렉토리를 해제하는 방법은 아래와 같습니다.

package main

import (
    "archive/zip"
    "os"
)

func main() {
    zipFile, err := zip.OpenReader("file.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()

        targetDir := "extracted"
        targetPath := filepath.Join(targetDir, file.Name)

        if file.FileInfo().IsDir() {
            os.MkdirAll(targetPath, os.ModePerm)
        } else {
            os.MkdirAll(filepath.Dir(targetPath), os.ModePerm)
            extractedFile, err := os.OpenFile(targetPath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, file.Mode())
            if err != nil {
                panic(err)
            }
            defer extractedFile.Close()
            _, err = io.Copy(extractedFile, zippedFile)
            if err != nil {
                panic(err)
            }
        }
    }
}

위의 코드는 압축된 파일이나 디렉토리를 해제하는 코드입니다. 압축 파일 속의 모든 파일과 디렉토리를 해제할 수 있습니다.

4. 결론

위의 예제를 통해 Go 언어를 사용하여 파일과 디렉토리를 압축하고 해제하는 방법을 배웠습니다. archive/zip 패키지를 사용하여 파일과 디렉토리를 압축하고 해제할 수 있는 간단한 방법을 알아보았습니다. Go를 사용하여 다양한 파일 및 디렉토리 압축 관련 작업을 수행할 수 있습니다.

참고 문헌