这是我使用 strings.Map 实现的练习(rot13 函数直接来自 golang 的文档)。问题是在 Read 函数返回后缓冲区似乎没有被修改。这是代码:
package main
import (
"io"
"os"
"strings"
"fmt"
)
type rot13Reader struct {
r io.Reader
}
func (reader *rot13Reader) Read(b []byte) (int, error) {
rot13 := func(r rune) rune {
switch {
case r >= 'A' && r <= 'Z':
return 'A' + (r-'A'+13)%26
case r >= 'a' && r <= 'z':
return 'a' + (r-'a'+13)%26
}
return r
}
n, err := reader.r.Read(b)
result := []byte(strings.Map(rot13, string(b)))
b = []byte(result)
fmt.Println(string(b))
return n, err
}
func main() {
s := strings.NewReader("Lbh penpxrq gur pbqr!")
r := rot13Reader{s}
io.Copy(os.Stdout, &r)
}
和输出:
You cracked the code!
Lbh penpxrq gur pbqr!You cracked the code!
显然Read函数中缓冲区已经被修改了,但是返回后似乎不是这样。如果我注释掉fmt.Println(string(b)),输出将是:
Lbh penpxrq gur pbqr!
关于读者和作家有什么奇怪的事情我应该知道吗?
沧海一幻觉
烙印99
相关分类