package main import ( "io" "os" "strings" ) type rot13Reader struct { r io.Reader } func (rot13 rot13Reader) Read(b []byte) (int,error) { n,err := rot13.r.Read(b) for i := 0; i < n; i++ { t := b[i] //lower char if t >= 97 && t <= 122 { if 122-t >= 13 { b[i] = t + 13 } else { b[i] = t - 13 } } //upper char if t >= 65 && t <= 90 { if 90-t >= 13 { b[i] = t + 13 } else { b[i] = t - 13 } } } return n,err } func main() { s := strings.NewReader("Lbh penpxrq gur pbqr!") r := rot13Reader{s} io.copy(os.Stdout,&r) }