user8645601
user8645601

Reputation: 97

can't understand code about go's print function

i am new to golang, when i read the code example of package "archtive/tar",i read some code like this:

// 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()
}

the output just like this:

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.

can anyone tell me how the programe print the body of the struct? thank you.

Upvotes: 0

Views: 69

Answers (1)

RayfenWindspear
RayfenWindspear

Reputation: 6274

You left out a vital piece of the example, the two lines preceding what you posted.

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

This creates a tar.Reader which implements io.Reader. The statement io.Copy(os.Stdout, tr) in the if statement knows how to copy the contents of the reader to Stdout.

Godoc for tar.Reader

Also might be useful to note that the code example in the package documentation doesn't ever write the tar it creates to disk. It is all done in memory using bytes.Buffers. Examples of writing to disk would be in the io package.

Upvotes: 2

Related Questions