> 백엔드 개발 > Golang > Go에서 TAR.GZ 파일을 추출하는 방법은 무엇입니까?

Go에서 TAR.GZ 파일을 추출하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-03 20:54:29
원래의
550명이 탐색했습니다.

How to Extract a TAR.GZ File in Go?

Go에서 TAR.GZ 파일 압축 풀기

Go에서 TAR.GZ 파일 압축 풀기에는 gzip 패키지를 사용하여 압축된 파일을 읽고 archive/tar 패키지를 사용하여 내용을 tarball로 구문 분석합니다. 수정된 코드 버전은 다음과 같습니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

<code class="go">package main

 

import (

    "archive/tar"

    "compress/gzip"

    "fmt"

    "io"

    "log"

    "os"

)

 

func ExtractTarGz(gzipStream io.Reader) {

    uncompressedStream, err := gzip.NewReader(gzipStream)

    if err != nil {

        log.Fatal("ExtractTarGz: NewReader failed")

    }

 

    tarReader := tar.NewReader(uncompressedStream)

 

    for true {

        header, err := tarReader.Next()

 

        if err == io.EOF {

            break

        }

 

        if err != nil {

            log.Fatalf("ExtractTarGz: Next() failed: %s", err.Error())

        }

 

        switch header.Typeflag {

        case tar.TypeDir:

            if err := os.Mkdir(header.Name, 0755); err != nil {

                log.Fatalf("ExtractTarGz: Mkdir() failed: %s", err.Error())

            }

        case tar.TypeReg:

            outFile, err := os.Create(header.Name)

            if err != nil {

                log.Fatalf("ExtractTarGz: Create() failed: %s", err.Error())

            }

            if _, err := io.Copy(outFile, tarReader); err != nil {

                log.Fatalf("ExtractTarGz: Copy() failed: %s", err.Error())

            }

            outFile.Close()

 

        default:

            log.Fatalf(

                "ExtractTarGz: uknown type: %s in %s",

                header.Typeflag,

                header.Name)

        }

 

    }

}

 

func main() {

    r, err := os.Open("./file.tar.gz")

    if err != nil {

        fmt.Println("error")

    }

    ExtractTarGz(r)

}</code>

로그인 후 복사

원본 코드의 주요 문제는 출력 파일을 작성한 후 닫지 않았다는 것입니다. 이로 인해 데이터 손상 및 "열린 파일이 너무 많습니다" 오류가 발생할 수 있습니다.

수정된 코드의 개선 사항:

  • 수정된 코드는 출력 파일을 닫습니다.
  • 파일을 열 수 없으면 콘솔에 오류 메시지를 인쇄합니다.

위 내용은 Go에서 TAR.GZ 파일을 추출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿