搜检官方文档,膨胀官方自带的和解演示:
// 官方演示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() } }官方的压文演示中并未将膨胀的内容输进文档,理论独霸中经常会用到。膨胀这边可用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膨胀:

同上,压文可独霸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() } }官方的演示中并未将膨胀的内容输进文档 ,理论独霸中经常会用到 。这边可用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膨胀
:

同上 ,可独霸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言语