golang讲解(go语言)标准库分析之strings结束篇

今天我们完结了这个strings的包,其实我们就剩下了type Reader和type Replacer这个我们之间讲过io的包,这样大家理解起来就比较省劲了!

(1)func NewReader(s string) *Reader通过读取一个字符串之后返回Reader对象,然后实现io.Reader, io.ReaderAt, io.Seeker, io.ByteScanner, 和io.RuneScanner 接口
  1. import (
  2. "fmt"
  3. "reflect"
  4. "strings"
  5. )
  6. func main() {
  7. reader := strings.NewReader("widuu web")
  8. fmt.Println(reflect.TypeOf(reader)) //*strings.Reader
  9. fmt.Println(reader.Len()) //9
  10. }

(2)func (r *Reader) Len() int这个函数很简单就是实现上边的接口的读取的字符串的数,上边已经写了,哈哈这里就省了哈

(3)func (r *Reader) Read(b []byte) (n int, err error),读取数据到b中,返回读取的实际大小n,如果出错返回err,例如EOF或者b的长度为0
  1. import (
  2. "fmt"
  3. "strings"
  4. )
  5. func main() {
  6. reader := strings.NewReader("hello widuu web")
  7. n, err := reader.Read(make([]byte, 10))
  8. if err != nil {
  9. fmt.Println(err)
  10. }
  11. fmt.Println(n) //10
  12. }

(4)func (r *Reader) ReadAt(b []byte, off int64) (n int, err error)这个跟我们前边写的是一样的都是根据偏移量来读取数据的
  1. import (
  2. "fmt"
  3. "strings"
  4. )
  5. func main() {
  6. reader := strings.NewReader("hello widuu web")
  7. b := make([]byte, 10)
  8. n, err := reader.ReadAt(b, 2)
  9. if err != nil {
  10. fmt.Println(err)
  11. }
  12. fmt.Println(string(b[:n])) //llo widuu
  13. }

(5)func (r *Reader) ReadByte() (b byte, err error),这个估计我都不用说大家都知道就是读取一个byte数据,然后返回的直接就是byte
  1. import (
  2. "fmt"
  3. "strings"
  4. )
  5. func main() {
  6. reader := strings.NewReader("hello widuu web")
  7. data, err := reader.ReadByte()
  8. if err == nil {
  9. fmt.Println(string(data))
  10. return
  11. }
  12. fmt.Println(err) //返回一个字节h
  13. }

(6)func (r *Reader) ReadRune() (ch rune, size int, err error)这个同上只不过返回的是一个rune类型的
  1. import (
  2. "fmt"
  3. "strings"
  4. )
  5. func main() {
  6. reader := strings.NewReader("hello widuu web")
  7. r, n, err := reader.ReadRune()
  8. if err != nil {
  9. fmt.Println(err)
  10. }
  11. fmt.Println(string(r), n) //h,1
  12. }

(7)func (r *Reader) Seek(offset int64, whence int) (int64, error)根据whence来移动offset,改变指针的
  1. import (
  2. "fmt"
  3. "strings"
  4. )
  5. func main() {
  6. reader := strings.NewReader("hello widuu")
  7. b := make([]byte, 8)
  8. n, _ := reader.Read(b)
  9. fmt.Println(string(b[:n])) //hello wi 这个时候没有读到要读d
  10. reader.Seek(2, 1) //这个时候我们在读取位置 偏移2
  11. n1, _ := reader.Read(b)
  12. fmt.Println(string(b[:n1])) //u
  13. }
(8)func (r *Reader) UnreadByte() error当前读取的位置向前移一个byte
  1. import (
  2. "fmt"
  3. "strings"
  4. )
  5. func main() {
  6. reader := strings.NewReader("hello widuu")
  7. b := make([]byte, 8)
  8. n, _ := reader.Read(b)
  9. fmt.Println(string(b[:n])) //hello wi 这个时候没有读到要读d
  10. reader.Seek(2, 1) //这个时候我们在读取位置 偏移2
  11. reader.UnreadByte() //然后向前偏移1字节
  12. n1, _ := reader.Read(b)
  13. fmt.Println(string(b[:n1])) //uu
  14. }

(9)func (r *Reader) UnreadRune() error这个一样只不过类型变了而已,参照上边的

(10)func (r *Reader) WriteTo(w io.Writer) (n int64, err error)这个借口主要继承了io.Write的功能所以我们可以这样做
  1. import (
  2. "fmt"
  3. "os"
  4. "strings"
  5. )
  6. func main() {
  7. reader := strings.NewReader("hello widuu")
  8. w, _ := os.Create("test.txt")
  9. defer w.Close()
  10. n, err := reader.WriteTo(w)
  11. if err != nil {
  12. fmt.Println(err)
  13. }
  14. fmt.Println(n) //11
  15. }

(11)func NewReplacer(oldnew …string) *Replacer NewReplacer从列表中返回一个新的替换后的字符串,oldnew是slice
  1. import (
  2. "fmt"
  3. "strings"
  4. )
  5. func main() {
  6. r := strings.NewReplacer("<", "&lt;", ">", "&gt;")
  7. fmt.Println(r.Replace("This is <b>HTML</b>!")) //This is &lt;b&gt;HTML&lt;/b&gt;!
  8. }

(2)func (r *Replacer) Replace(s string) string这个上边已经写出函数了,就是对字符串进行替换,大家可以参考上边的程序

(3)func (r *Replacer) WriteString(w io.Writer, s string) (n int, err error)函数讲字符串替换后,然后写入w中
  1. import (
  2. "fmt"
  3. "io/ioutil"
  4. "os"
  5. "strings"
  6. )
  7. func main() {
  8. r := strings.NewReplacer("<", "&lt;", ">", "&gt;")
  9. w, _ := os.OpenFile("test1.txt", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777)
  10. defer w.Close()
  11. n, err := r.WriteString(w, "This is <b>HTML</b>!")
  12. if err != nil {
  13. fmt.Println(err)
  14. }
  15. fmt.Println(n)
  16. d, _ := ioutil.ReadFile("test1.txt") //32
  17. fmt.Println(string(d)) //This is &lt;b&gt;HTML&lt;/b&gt;!
  18. }

每天只讲一点golang的标准库,方便大家学习和使用,更多的时候去理解标准库,大家多动手,如果你喜欢请继续关注我们微度网络-网络技术支持中心http://www.widuu.com