// Copyright 2015 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 io_test import ( "bytes" "fmt" "io" "log" "os" "strings" ) func ExampleCopy() { r := strings.NewReader("some io.Reader stream to be read\n") if _, err := io.Copy(os.Stdout, r); err != nil { log.Fatal(err) } // Output: // some io.Reader stream to be read } func ExampleCopyBuffer() { r1 := strings.NewReader("first reader\n") r2 := strings.NewReader("second reader\n") buf := make([]byte, 8) // buf is used here... if _, err := io.CopyBuffer(os.Stdout, r1, buf); err != nil { log.Fatal(err) } // ... reused here also. No need to allocate an extra buffer. if _, err := io.CopyBuffer(os.Stdout, r2, buf); err != nil { log.Fatal(err) } // Output: // first reader // second reader } func ExampleCopyN() { r := strings.NewReader("some io.Reader stream to be read") if _, err := io.CopyN(os.Stdout, r, 4); err != nil { log.Fatal(err) } // Output: // some } func ExampleReadAtLeast() { r := strings.NewReader("some io.Reader stream to be read\n") buf := make([]byte, 14) if _, err := io.ReadAtLeast(r, buf, 4); err != nil { log.Fatal(err) } fmt.Printf("%s\n", buf) // buffer smaller than minimal read size. shortBuf := make([]byte, 3) if _, err := io.ReadAtLeast(r, shortBuf, 4); err != nil { fmt.Println("error:", err) } // minimal read size bigger than io.Reader stream longBuf := make([]byte, 64) if _, err := io.ReadAtLeast(r, longBuf, 64); err != nil { fmt.Println("error:", err) } // Output: // some io.Reader // error: short buffer // error: unexpected EOF } func ExampleReadFull() { r := strings.NewReader("some io.Reader stream to be read\n") buf := make([]byte, 4) if _, err := io.ReadFull(r, buf); err != nil { log.Fatal(err) } fmt.Printf("%s\n", buf) // minimal read size bigger than io.Reader stream longBuf := make([]byte, 64) if _, err := io.ReadFull(r, longBuf); err != nil { fmt.Println("error:", err) } // Output: // some // error: unexpected EOF } func ExampleWriteString() { if _, err := io.WriteString(os.Stdout, "Hello World"); err != nil { log.Fatal(err) } // Output: Hello World } func ExampleLimitReader() { r := strings.NewReader("some io.Reader stream to be read\n") lr := io.LimitReader(r, 4) if _, err := io.Copy(os.Stdout, lr); err != nil { log.Fatal(err) } // Output: // some } func ExampleMultiReader() { r1 := strings.NewReader("first reader ") r2 := strings.NewReader("second reader ") r3 := strings.NewReader("third reader\n") r := io.MultiReader(r1, r2, r3) if _, err := io.Copy(os.Stdout, r); err != nil { log.Fatal(err) } // Output: // first reader second reader third reader } func ExampleTeeReader() { var r io.Reader = strings.NewReader("some io.Reader stream to be read\n") r = io.TeeReader(r, os.Stdout) // Everything read from r will be copied to stdout. io.ReadAll(r) // Output: // some io.Reader stream to be read } func ExampleSectionReader() { r := strings.NewReader("some io.Reader stream to be read\n") s := io.NewSectionReader(r, 5, 17) if _, err := io.Copy(os.Stdout, s); err != nil { log.Fatal(err) } // Output: // io.Reader stream } func ExampleSectionReader_ReadAt() { r := strings.NewReader("some io.Reader stream to be read\n") s := io.NewSectionReader(r, 5, 17) buf := make([]byte, 6) if _, err := s.ReadAt(buf, 10); err != nil { log.Fatal(err) } fmt.Printf("%s\n", buf) // Output: // stream } func ExampleSectionReader_Seek() { r := strings.NewReader("some io.Reader stream to be read\n") s := io.NewSectionReader(r, 5, 17) if _, err := s.Seek(10, io.SeekStart); err != nil { log.Fatal(err) } if _, err := io.Copy(os.Stdout, s); err != nil { log.Fatal(err) } // Output: // stream } func ExampleSeeker_Seek() { r := strings.NewReader("some io.Reader stream to be read\n") r.Seek(5, io.SeekStart) // move to the 5th char from the start if _, err := io.Copy(os.Stdout, r); err != nil { log.Fatal(err) } r.Seek(-5, io.SeekEnd) if _, err := io.Copy(os.Stdout, r); err != nil { log.Fatal(err) } // Output: // io.Reader stream to be read // read } func ExampleMultiWriter() { r := strings.NewReader("some io.Reader stream to be read\n") var buf1, buf2 bytes.Buffer w := io.MultiWriter(&buf1, &buf2) if _, err := io.Copy(w, r); err != nil { log.Fatal(err) } fmt.Print(buf1.String()) fmt.Print(buf2.String()) // Output: // some io.Reader stream to be read // some io.Reader stream to be read } func ExamplePipe() { r, w := io.Pipe() go func() { fmt.Fprint(w, "some io.Reader stream to be read\n") w.Close() }() if _, err := io.Copy(os.Stdout, r); err != nil { log.Fatal(err) } // Output: // some io.Reader stream to be read } func ExampleReadAll() { r := strings.NewReader("Go is a general-purpose language designed with systems programming in mind.") b, err := io.ReadAll(r) if err != nil { log.Fatal(err) } fmt.Printf("%s", b) // Output: // Go is a general-purpose language designed with systems programming in mind. }