https://blog.csdn.net/xiongwei1209/article/details/7550518
package main
import (
"io"
"os"
"strings"
)
type rot13Reader struct {
r io.Reader
}
func (_r *rot13Reader) Read(b []byte) (n int,err error){
n,err =_r.r.Read(b)
for i,v :=range b{
b[i]=rot13(v)
}
return
}
func rot13(p byte) byte {
switch {
case p >= 'A' && p <= 'M':
p += 13
case p >= 'N' && p <= 'Z':
p -= 13
case p >= 'a' && p <= 'm':
p += 13
case p >= 'n' && p <= 'z':
p -= 13
}
return p
}
//-----output-------
You cracked the code!
Program exited.
func main() {
s := strings.NewReader("Lbh penpxrq gur pbqr!")
r := rot13Reader{s}
io.Copy(os.Stdout, &r)
}