The io.Reader interface
The io.Reader interface, as shown in the following listing, is simple. It consists of a single method, Read([]byte)(int, error), intended to let programmers implement code that reads data, from an arbitrary source, and transfers it into the provided slice of bytes.
type Reader interface {
Read(p []byte) (n int, err error)
}
The Read method returns the total number of bytes transferred into the provided slice and an error value (if necessary). As a guideline, implementations of the io.Reader should return an error value of io.EOF when the reader has no more data to transfer into stream p. The following shows the type alphaReader, a trivial implementation of the io.Reader that filters out non-alpha characters from its string source:
type alphaReader string
func (a alphaReader) Read(p []byte) (int, error) {
count := 0
for i := 0; i < len(a); i++ {
if (a[i] >= 'A' && a[i] <= 'Z') |...