November 2017
Intermediate to advanced
670 pages
17h 35m
English
Let's exercise what we've learned about the io.Reader and io.Writer interfaces:
package mainimport ( "io" "strings" "os")type titlizeReader struct { src io.Reader}func NewTitlizeReader(source io.Reader) *titlizeReader { return &titlizeReader{source}}
Recall that the Reader interface looks like this:
type Reader interface { Read(p []byte) (n int, err error)}
When we implement the Read method, our titlizeReader struct now satisfies the Reader interface:
func (t *titlizeReader) Read(p []byte) (int, error) { count, err := t.src.Read(p) if err != nil { return count, err } for i := 0; i < len(p); i++ { if i == 0 { if (p[i] >= 'a' && p[i] <= 'z') { p[i] = p[i] - 32 } } else { if (p[i] >= 'A' && p[i] <= 'Z' ...