查看官方文档,官方自带的演示:

// 官方演示package main import ( “archive/tar” “bytes” “fmt” “io” “log” “os”) func main() { // 将若干文件写入压缩文档 // 这边源文件是直接写在代码里哈,然后也没有输出一个文档 // 后面会演示源文件进行压缩,然后输出一个tar.gz的压缩文档 var buf bytes.Buffer tw := tar.NewWriter(&buf) var files = []struct { Name, Body string }{ {“readme.txt”, “This archive contains some text files.”}, {“gopher.txt”, “Gopher names:\nGeorge\nGeoffrey\nGonzo”}, {“todo.txt”, “Get animal handling license.”}, } for _, file := range files { hdr := &tar.Header{ Name: file.Name, Mode: 0600, Size: int64(len(file.Body)), } if err := tw.WriteHeader(hdr); err != nil { log.Fatal(err) } if _, err := tw.Write([]byte(file.Body)); err != nil { log.Fatal(err) } } if err := tw.Close(); err != nil { log.Fatal(err) } // 上面压缩了之后,压缩内容都存储在buf这个变量里 // 这边遍历输出一下即可 tr := tar.NewReader(&buf) for { hdr, err := tr.Next() if err == io.EOF { break // 文件已经遍历完成了 } if err != nil { log.Fatal(err) } fmt.Printf(“%s的文件内容: “, hdr.Name) if _, err := io.Copy(os.Stdout, tr); err != nil { log.Fatal(err) } fmt.Println() } } 1、压缩并输出tar.gz文档

官方的演示中并未将压缩的内容输出文档,实际使用中经常会用到。这边可用os库中的文件操作,将压缩内容写入文档,参考

代码如下:

// tar压缩// 这边演示一下从源文件进行压缩,然后输出一个tar.gz文档// 作者:陈杰斌// 参考地址:http://www.01happy.com/golang-tar/package main import ( “archive/tar” “bytes” “log” “os”) func main() { // 创建一个缓冲区用来保存压缩文件内容 var buf bytes.Buffer // 创建一个压缩文档 tw := tar.NewWriter(&buf) // 定义一堆文件 // 将文件写入到压缩文档tw var files = []struct { Name, Body string }{ {“readme.txt”, “This archive contains some text files.”}, {“gopher.txt”, “Gopher names:\nGeorge\nGeoffrey\nGonzo”}, {“todo.txt”, “Get animal handling license.”}, } for _, file := range files { hdr := &tar.Header{ Name: file.Name, Mode: 0600, Size: int64(len(file.Body)), } if err := tw.WriteHeader(hdr); err != nil { log.Fatal(err) } if _, err := tw.Write([]byte(file.Body)); err != nil { log.Fatal(err) } } if err := tw.Close(); err != nil { log.Fatal(err) } // 将压缩文档内容写入文件 file.tar.gz f, err := os.OpenFile(“file.tar.gz”, os.O_CREATE|os.O_WRONLY, 0666) if err != nil { log.Fatal(err) } buf.WriteTo(f)}

执行一下哈:

> go run compress.go

golang中tar压缩:

2、tar解压缩

同上,可以使用os库将文档内容读入

// tar解压缩演示// 这边演示一下从源文件进行解压,然后输出文件内容// 作者:陈杰斌// 参考地址:http://www.01happy.com/golang-tar/package main import ( “archive/tar” “fmt” “io” “log” “os”) func main() { // 解压需要使用tar.NewReader方法, 这个方法接收一个io.Reader对象 // 那边怎么从源文件得到io.Reader对象呢? // 这边通过os.Open打开文件,会得到一个os.File对象, // 因为他实现了io.Reader的Read方法,所有可以直接传递给tar.NewReader file, err := os.Open(“file.tar.gz”) if err != nil { log.Fatalln(err) } defer file.Close() // tar对象读取文件内容, 遍历输出文件内容 tr := tar.NewReader(file) for { hdr, err := tr.Next() if err == io.EOF { break // End of archive } if err != nil { log.Fatal(err) } fmt.Printf(“%s文件内容:\n”, hdr.Name) if _, err := io.Copy(os.Stdout, tr); err != nil { log.Fatal(err) } fmt.Println() }}

执行一下:

> go run decompress.go

golang中tar解压:

到此这篇关于golang中tar压缩和解压

查看官方文档,官方自带的演示:

// 官方演示package main import ( “archive/tar” “bytes” “fmt” “io” “log” “os”) func main() { // 将若干文件写入压缩文档 // 这边源文件是直接写在代码里哈,然后也没有输出一个文档 // 后面会演示源文件进行压缩,然后输出一个tar.gz的压缩文档 var buf bytes.Buffer tw := tar.NewWriter(&buf) var files = []struct { Name, Body string }{ {“readme.txt”, “This archive contains some text files.”}, {“gopher.txt”, “Gopher names:\nGeorge\nGeoffrey\nGonzo”}, {“todo.txt”, “Get animal handling license.”}, } for _, file := range files { hdr := &tar.Header{ Name: file.Name, Mode: 0600, Size: int64(len(file.Body)), } if err := tw.WriteHeader(hdr); err != nil { log.Fatal(err) } if _, err := tw.Write([]byte(file.Body)); err != nil { log.Fatal(err) } } if err := tw.Close(); err != nil { log.Fatal(err) } // 上面压缩了之后,压缩内容都存储在buf这个变量里 // 这边遍历输出一下即可 tr := tar.NewReader(&buf) for { hdr, err := tr.Next() if err == io.EOF { break // 文件已经遍历完成了 } if err != nil { log.Fatal(err) } fmt.Printf(“%s的文件内容: “, hdr.Name) if _, err := io.Copy(os.Stdout, tr); err != nil { log.Fatal(err) } fmt.Println() } } 1、压缩并输出tar.gz文档

官方的演示中并未将压缩的内容输出文档,实际使用中经常会用到。这边可用os库中的文件操作,将压缩内容写入文档,参考

代码如下:

// tar压缩// 这边演示一下从源文件进行压缩,然后输出一个tar.gz文档// 作者:陈杰斌// 参考地址:http://www.01happy.com/golang-tar/package main import ( “archive/tar” “bytes” “log” “os”) func main() { // 创建一个缓冲区用来保存压缩文件内容 var buf bytes.Buffer // 创建一个压缩文档 tw := tar.NewWriter(&buf) // 定义一堆文件 // 将文件写入到压缩文档tw var files = []struct { Name, Body string }{ {“readme.txt”, “This archive contains some text files.”}, {“gopher.txt”, “Gopher names:\nGeorge\nGeoffrey\nGonzo”}, {“todo.txt”, “Get animal handling license.”}, } for _, file := range files { hdr := &tar.Header{ Name: file.Name, Mode: 0600, Size: int64(len(file.Body)), } if err := tw.WriteHeader(hdr); err != nil { log.Fatal(err) } if _, err := tw.Write([]byte(file.Body)); err != nil { log.Fatal(err) } } if err := tw.Close(); err != nil { log.Fatal(err) } // 将压缩文档内容写入文件 file.tar.gz f, err := os.OpenFile(“file.tar.gz”, os.O_CREATE|os.O_WRONLY, 0666) if err != nil { log.Fatal(err) } buf.WriteTo(f)}

执行一下哈:

> go run compress.go

golang中tar压缩:

2、tar解压缩

同上,可以使用os库将文档内容读入

// tar解压缩演示// 这边演示一下从源文件进行解压,然后输出文件内容// 作者:陈杰斌// 参考地址:http://www.01happy.com/golang-tar/package main import ( “archive/tar” “fmt” “io” “log” “os”) func main() { // 解压需要使用tar.NewReader方法, 这个方法接收一个io.Reader对象 // 那边怎么从源文件得到io.Reader对象呢? // 这边通过os.Open打开文件,会得到一个os.File对象, // 因为他实现了io.Reader的Read方法,所有可以直接传递给tar.NewReader file, err := os.Open(“file.tar.gz”) if err != nil { log.Fatalln(err) } defer file.Close() // tar对象读取文件内容, 遍历输出文件内容 tr := tar.NewReader(file) for { hdr, err := tr.Next() if err == io.EOF { break // End of archive } if err != nil { log.Fatal(err) } fmt.Printf(“%s文件内容:\n”, hdr.Name) if _, err := io.Copy(os.Stdout, tr); err != nil { log.Fatal(err) } fmt.Println() }}

执行一下:

> go run decompress.go

golang中tar解压:

到此这篇关于golang中tar压缩和解压Go语言

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。