|  | // 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_minimal() { | 
|  | // Create and add some files to the archive. | 
|  | 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) | 
|  | } | 
|  |  | 
|  | // Open and iterate through the files in the archive. | 
|  | tr := tar.NewReader(&buf) | 
|  | for { | 
|  | hdr, err := tr.Next() | 
|  | if err == io.EOF { | 
|  | break // End of archive | 
|  | } | 
|  | if err != nil { | 
|  | log.Fatal(err) | 
|  | } | 
|  | fmt.Printf("Contents of %s:\n", hdr.Name) | 
|  | if _, err := io.Copy(os.Stdout, tr); err != nil { | 
|  | log.Fatal(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. | 
|  | } |