无法理解有关go的打印功能的代码

时间:2017-11-14 16:12:09

标签: go

我是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.

谁能告诉我程序如何打印结构体?谢谢。

1 个答案:

答案 0 :(得分:2)

你遗漏了一个重要的例子,就是你发布的两条线。

// Open the tar archive for reading.
r := bytes.NewReader(buf.Bytes())
tr := tar.NewReader(r)

这会创建一个tar.Reader来实现io.Readerio.Copy(os.Stdout, tr)语句中的语句if知道如何将阅读器的内容复制到Stdout

Godoc for tar.Reader

同样可能有用的是要注意包文档中的代码示例不会将它创建的tar写入磁盘。这些都是使用bytes.Buffer s在内存中完成的。写入磁盘的示例将在io包中。

相关问题