func (r *Reader) ReadRune() (ch rune, size int, err error)
func main() {
s := "你好 世界!"
// 创建 Reader
r := strings.NewReader(s)
// 读取 r 中的一个字符
for i := 0; i < 5; i++ {
b, n, _ := r.ReadRune()
fmt.Printf(`"%c:%v", `, b, n)
// "你:3", "好:3", " :1", "世:3", "界:3",
}
}
------------------------------------------------------------
// 撤消前一次的 ReadRune 操作
func (r *Reader) UnreadRune() errorfunc main() {
s := "你好 世界!"
// 创建 Reader
r := strings.NewReader(s)
// 读取 r 中的一个字符
for i := 0; i < 5; i++ {
b, _, _ := r.ReadRune()
fmt.Printf("%q, ", b)
// '你', '你', '你', '你', '你',
r.UnreadRune() // 撤消前一次的字符读取操作
}
}
------------------------------------------------------------
// Seek 用来移动 r 中的索引位置
// offset:要移动的偏移量,负数表示反向移动
// whence:从那里开始移动,0:起始位置,1:当前位置,2:结尾位置
// 如果 whence 不是 0、1、2,则返回错误信息
// 如果目标索引位置超出字符串范围,则返回错误信息
// 目标索引位置不能超出 1 << 31,否则返回错误信息
func (r *Reader) Seek(offset int64, whence int) (int64, error)func main() {
s := "Hello World!"
// 创建 Reader
r := strings.NewReader(s)
// 创建读取缓冲区
b := make([]byte, 5)
// 读取 r 中指定位置的内容
r.Seek(6, 0) // 移动索引位置到第 7 个字节
r.Read(b) // 开始读取
fmt.Printf("%qn", b)
r.Seek(-5, 1) // 将索引位置移回去
r.Read(b) // 继续读取
fmt.Printf("%qn", b)
}
------------------------------------------------------------
// WriteTo 将 r.i 之后的数据写入接口 w 中
func (r *Reader) WriteTo(w io.Writer) (n int64, err error)func main() {
s := "Hello World!"
// 创建 Reader
r := strings.NewReader(s)
// 创建 bytes.Buffer 对象,它实现了 io.Writer 接口
buf := bytes.NewBuffer(nil)
// 将 r 中的数据写入 buf 中
r.WriteTo(buf)
fmt.Printf("%qn", buf) // "Hello World!"
}
============================================================
// replace.go
------------------------------------------------------------
// Replacer 根据一个替换列表执行替换操作










