Go语言学习笔记-A Tour of Go 练习笔记-rot13Reader
创始人
2024-03-08 02:08:05

Exercise: rot13Reader

练习题目:

A common pattern is an io.Reader that wraps another io.Reader, modifying the stream in some way.

For example, the gzip.NewReader function takes an io.Reader (a stream of compressed data) and returns a *gzip.Reader that also implements io.Reader (a stream of the decompressed data).

Implement a rot13Reader that implements io.Reader and reads from an io.Reader, modifying the stream by applying the rot13 substitution cipher to all alphabetical characters.

The rot13Reader type is provided for you. Make it an io.Reader by implementing its Read method.

练习程序:

package mainimport ("io""os""strings"
)type rot13Reader struct {r io.Reader
}func rot13(x byte) byte {switch {case x >= 65 && x <= 77:fallthroughcase x >= 97 && x <= 109:x = x + 13case x >= 78 && x <= 90:fallthroughcase x >= 110 && x <= 122:x = x - 13}return x
}func (rot rot13Reader) Read(a []byte) (int, error) {n, err := rot.r.Read(a)for key, value := range(a) {a[key] = rot13(value)}return n, err
}func main() {s := strings.NewReader("Lbh penpxrq gur pbqr!")r := rot13Reader{s}io.Copy(os.Stdout, &r)
}

运行结果:

You cracked the code!

学习笔记:

该题目是对于GO中Read方法的进阶练习,GO中常用的一种方式是用一个io.Reader去封装另一个io.Reader,这样可以实现很多功能,比如可以先通过里层的io.Reader从加密的文本中先读取加密字符,然后在外层的io.Reader的Read方法中实现解密并输出,这样就完成了一种直接读取解密文本的能力。本题目就是类似的场景,使用的加密算法是比较简单的ROT13字符替换加密法。

相关内容

热门资讯

上海市政府党组参观上海市树立和... 进一步把正确政绩观内化于心、外化于行,努力创造经得起实践、人民和历史检验的实绩。 今天(5月18日)...
05月18日 新西兰元兑美元突... Hehson外汇消息2026年05月18日,截至20时34分,外汇市场上新西兰元兑美元汇率突破1新西...
中国石油黑龙江销售公司多款商品... 转自:新华财经图为会场内的中国石油展台。5月17日,第十届中俄博览会在哈尔滨开幕。活动现场,中国石油...
合肥,赢麻了 (来源:21城市观)合肥城市景观。图源:摄图网作者|孙燕编辑|卜羽勤5月17日,长鑫科技集团股份有限...
王力宏承认用代言费购买比亚迪股... 5月18日,腾势汽车品牌全球代言人王力宏现身腾势N9闪充版发布会,面对“是否拿代言费买了比亚迪股票”...