package main
import (
"io"
"os"
"strings"
)
type rot13Reader struct {
r io.Reader
}
//rot13将数字+13转化为字母,对该数字减13即可
//通过这方方法,将其做成一个包封器(wrapper)
func (this * rot13Reader)Read(bytes []byte) (n int, err error){
readed, readErr := this.r.Read(bytes)
if readErr != nil{
return 0, readErr
}
for i,v := range bytes{
iv := int(v)
//我还以为go语言没有字符的概念呢
if iv > 'A' && iv < 'Z'{
if iv >= 'N'{
bytes[i] = byte(iv-13)
}else{
bytes[i] = byte(iv+13)
}
}
//Go语言的字符和C语言一样的,有字符,也有字符串
//但是go语言的字符类型都是rune(unicode字符)
//rune就是int32
if iv > 'a' && iv < 'z'{
if iv >= 'n'{
bytes[i] = byte(iv-13)
}else{
bytes[i] = byte(iv+13)
}
}
}
return readed,nil
}
func main() {
s := strings.NewReader("Lbh penpxrq gur pbqr!")
r := rot13Reader{s}
io.Copy(os.Stdout, &r)
}
go语言Reader包封
最新推荐文章于 2021-05-04 08:46:55 发布