refactor: handle err with fprintln io ifaces
This commit is contained in:
		@@ -11,7 +11,6 @@ package main
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"io"
 | 
						"io"
 | 
				
			||||||
	"log"
 | 
					 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -21,31 +20,36 @@ func main() {
 | 
				
			|||||||
	// #1: reads from the standard input
 | 
						// #1: reads from the standard input
 | 
				
			||||||
	// ------------------------------------------------
 | 
						// ------------------------------------------------
 | 
				
			||||||
	// if err := read(os.Stdin); err != nil {
 | 
						// if err := read(os.Stdin); err != nil {
 | 
				
			||||||
	// 	log.Fatal(err)
 | 
						// 	fmt.Fprintln(os.Stderr, err)
 | 
				
			||||||
 | 
						// 	return
 | 
				
			||||||
	// }
 | 
						// }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// #2: writes to the standard output
 | 
						// #2: writes to the standard output
 | 
				
			||||||
	// ------------------------------------------------
 | 
						// ------------------------------------------------
 | 
				
			||||||
	// buf := []byte("hi!\n")
 | 
						// buf := []byte("hi!\n")
 | 
				
			||||||
	// if err := write(os.Stdout, buf); err != nil {
 | 
						// if err := write(os.Stdout, buf); err != nil {
 | 
				
			||||||
	// 	log.Fatal(err)
 | 
						// 	fmt.Fprintln(os.Stderr, err)
 | 
				
			||||||
 | 
						// 	return
 | 
				
			||||||
	// }
 | 
						// }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// #2b: reads the entire file content into memory.
 | 
						// #2b: reads the entire file content into memory.
 | 
				
			||||||
	// ------------------------------------------------
 | 
						// ------------------------------------------------
 | 
				
			||||||
	// buf, err := ioutil.ReadFile("alice.txt")
 | 
						// buf, err := ioutil.ReadFile("alice.txt")
 | 
				
			||||||
	// if err != nil {
 | 
						// if err != nil {
 | 
				
			||||||
	// 	log.Fatal(err)
 | 
						// 	fmt.Fprintln(os.Stderr, err)
 | 
				
			||||||
 | 
						// 	return
 | 
				
			||||||
	// }
 | 
						// }
 | 
				
			||||||
	// if err := write(os.Stdout, buf); err != nil {
 | 
						// if err := write(os.Stdout, buf); err != nil {
 | 
				
			||||||
	// 	log.Fatal(err)
 | 
						// 	fmt.Fprintln(os.Stderr, err)
 | 
				
			||||||
 | 
						// 	return
 | 
				
			||||||
	// }
 | 
						// }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// #3: reads and writes with 32KB of memory
 | 
						// #3: reads and writes with 32KB of memory
 | 
				
			||||||
	//     no matter how large the source data is.
 | 
						//     no matter how large the source data is.
 | 
				
			||||||
	// ------------------------------------------------
 | 
						// ------------------------------------------------
 | 
				
			||||||
	if err := ioCopy(os.Stdout, os.Stdin); err != nil {
 | 
						if err := ioCopy(os.Stdout, os.Stdin); err != nil {
 | 
				
			||||||
		log.Fatal(err)
 | 
							fmt.Fprintln(os.Stderr, err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -78,7 +82,7 @@ func ioCopy(dst, src *os.File) error {
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// write method example.
 | 
					// write example.
 | 
				
			||||||
func write(dst *os.File, buf []byte) error {
 | 
					func write(dst *os.File, buf []byte) error {
 | 
				
			||||||
	nw, ew := dst.Write(buf)
 | 
						nw, ew := dst.Write(buf)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -87,3 +91,25 @@ func write(dst *os.File, buf []byte) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	return ew
 | 
						return ew
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// read example.
 | 
				
			||||||
 | 
					func read(src *os.File) error {
 | 
				
			||||||
 | 
						buf := make([]byte, 1024*32) // in the middle.
 | 
				
			||||||
 | 
						// buf := make([]byte, 148157) // defies the purpose of streaming.
 | 
				
			||||||
 | 
						// buf := make([]byte, 8) // too many chunking.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for {
 | 
				
			||||||
 | 
							nr, er := src.Read(buf)
 | 
				
			||||||
 | 
							// fmt.Printf("buf      : %q\n", buf[0:nr])
 | 
				
			||||||
 | 
							fmt.Printf("read     : %d bytes\n", nr)
 | 
				
			||||||
 | 
							fmt.Printf("read err : %v\n", er)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if er == io.EOF {
 | 
				
			||||||
 | 
								return nil
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if er != nil {
 | 
				
			||||||
 | 
								return er
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user