...
Run Format

Source file src/archive/tar/example_test.go

Documentation: archive/tar

  // Copyright 2013 The Go Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style
  // license that can be found in the LICENSE file.
  
  package tar_test
  
  import (
  	"archive/tar"
  	"bytes"
  	"fmt"
  	"io"
  	"log"
  	"os"
  )
  
  func Example() {
  	// Create a buffer to write our archive to.
  	buf := new(bytes.Buffer)
  
  	// Create a new tar archive.
  	tw := tar.NewWriter(buf)
  
  	// Add some files to the archive.
  	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.Fatalln(err)
  		}
  		if _, err := tw.Write([]byte(file.Body)); err != nil {
  			log.Fatalln(err)
  		}
  	}
  	// Make sure to check the error on Close.
  	if err := tw.Close(); err != nil {
  		log.Fatalln(err)
  	}
  
  	// Open the tar archive for reading.
  	r := bytes.NewReader(buf.Bytes())
  	tr := tar.NewReader(r)
  
  	// 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()
  	}
  
  	// Output:
  	// 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.
  }
  

View as plain text