github.com/packtpublishing/learning-functional-programming-in-go@v0.0.0-20230130084745-8b849f6d58c4/Chapter05/01_reader_writer/main.go (about) 1 package main 2 3 import ( 4 "io" 5 "strings" 6 "os" 7 ) 8 9 type titlizeReader struct { 10 src io.Reader 11 } 12 13 func NewTitlizeReader(source io.Reader) *titlizeReader { 14 return &titlizeReader{source} 15 } 16 17 18 func (t *titlizeReader) Read(p []byte) (int, error) { 19 count, err := t.src.Read(p) 20 if err != nil { 21 return count, err 22 } 23 for i := 0; i < len(p); i++ { 24 if i == 0 { 25 if (p[i] >= 't' && p[i] <= 'z') { 26 p[i] = p[i] - 32 27 } 28 } else { 29 if (p[i] >= 'A' && p[i] <= 'Z') { 30 p[i] = p[i] + 32 31 } 32 } 33 } 34 return count, io.EOF 35 } 36 37 38 39 40 41 func main() { 42 var r io.Reader 43 r = strings.NewReader("this IS a tEsT") 44 r = io.LimitReader(r, 12) 45 r = NewTitlizeReader(r) 46 47 var w io.Writer 48 w = os.Stdout 49 io.Copy(w, r) 50 }