我是golang的新手,当我阅读包" archtive / tar"的代码示例时,我读了一些这样的代码:
// Iterate through the files in the archive.
for {
hdr, err := tr.Next()
if err == io.EOF {
// end of tar archive
break
}
if err != nil {
log.Fatalln(err)
}
fmt.Printf("Contents of %s:\n", hdr.Name)
if _, err := io.Copy(os.Stdout, tr); err != nil {
log.Fatalln(err)
}
fmt.Println()
}
输出就像这样:
Contents of readme.txt:
This archive contains some text files.
Contents of gopher.txt:
Gopher names:
George
Geoffrey
Gonzo
Contents of todo.txt:
Get animal handling license.
谁能告诉我程序如何打印结构体?谢谢。
答案 0 :(得分:2)
你遗漏了一个重要的例子,就是你发布的两条线。
// Open the tar archive for reading.
r := bytes.NewReader(buf.Bytes())
tr := tar.NewReader(r)
这会创建一个tar.Reader
来实现io.Reader
。 io.Copy(os.Stdout, tr)
语句中的语句if
知道如何将阅读器的内容复制到Stdout
。
同样可能有用的是要注意包文档中的代码示例不会将它创建的tar写入磁盘。这些都是使用bytes.Buffer
s在内存中完成的。写入磁盘的示例将在io
包中。