github.com/sashka/siva@v1.6.0/example_test.go (about) 1 package siva_test 2 3 import ( 4 "bytes" 5 "fmt" 6 "io" 7 "log" 8 "os" 9 "time" 10 11 "gopkg.in/src-d/go-siva.v1" 12 ) 13 14 func Example() { 15 // Create a buffer to write our archive to. 16 buf := new(bytes.Buffer) 17 18 // Create a new siva archive. 19 w := siva.NewWriter(buf) 20 21 // Add some files to the archive. 22 var files = []struct { 23 Name, Body string 24 }{ 25 {"gopher.txt", "Gopher names:\nGeorge\nGeoffrey\nGonzo"}, 26 {"readme.txt", "This archive contains some text files."}, 27 {"todo.txt", "Get animal handling license."}, 28 } 29 for _, file := range files { 30 hdr := &siva.Header{ 31 Name: file.Name, 32 Mode: 0600, 33 ModTime: time.Now(), 34 } 35 if err := w.WriteHeader(hdr); err != nil { 36 log.Fatalln(err) 37 } 38 if _, err := w.Write([]byte(file.Body)); err != nil { 39 log.Fatalln(err) 40 } 41 } 42 // Make sure to check the error on Close. 43 if err := w.Close(); err != nil { 44 log.Fatalln(err) 45 } 46 47 // Open the siva archive for reading. 48 file := bytes.NewReader(buf.Bytes()) 49 r := siva.NewReader(file) 50 51 // Get all files in the siva file. 52 i, err := r.Index() 53 if err != nil { 54 log.Fatalln(err) 55 } 56 57 // Iterate through the files in the archive. 58 for _, e := range i { 59 content, err := r.Get(e) 60 if err != nil { 61 log.Fatalln(err) 62 } 63 fmt.Printf("Contents of %s:\n", e.Name) 64 if _, err := io.Copy(os.Stdout, content); err != nil { 65 log.Fatalln(err) 66 } 67 fmt.Println() 68 } 69 70 // Output: 71 // Contents of gopher.txt: 72 // Gopher names: 73 // George 74 // Geoffrey 75 // Gonzo 76 // Contents of readme.txt: 77 // This archive contains some text files. 78 // Contents of todo.txt: 79 // Get animal handling license. 80 }