08.11 再看strings包
我们在第4章“复合类型的使用”中首先讨论了strings包。本节将讨论与文件输入和输出相关的strings包。
str.go第一部分代码如下:
1
package main
2
3
import (
4
"fmt"
5
"io"
6
"os"
7
"strings"
8
)
Copied!
str.go的第二段代码如下:
1
func main() {
2
r := strings.NewReader("test")
3
fmt.Println("r length", r.Len())
Copied!
strings.NewReader()函数从字符串创建只读Readerstrings.Reader对象实现了io.Readerio.ReaderAtio.Seekerio.WriterToio.ByteScannerio.RuneScanner接口。
str.go第三部分代码如下:
1
b := make([]byte, 1)
2
for {
3
n, err := r.Read(b)
4
if err == io.EOF {
5
break
6
}
7
8
if err != nil {
9
fmt.Println(err)
10
continue
11
}
12
13
fmt.Printf("Read %s Bytes: %d\n", b, n)
14
}
Copied!
此处,你可以看到如何使用strings.Reader作为io.Reader接口,从而使用Read()函数逐字节读取字符串。
str.go的最后一段代码如下:
1
s := strings.NewReader("This is an error!\n")
2
fmt.Println("r length:", s.Len())
3
n, err := s.WriteTo(os.Stderr)
4
if err != nil {
5
fmt.Println(err)
6
return
7
}
8
fmt.Printf("Wrote %d bytes to os.Stderr\n", n)
9
}
Copied!
在这段代码中,你可以看到如何在strings包的帮助下编写标准错误。
1
$ go run str.go
2
r length 4
3
Read t Bytes: 1
4
Read e Bytes: 1
5
Read s Bytes: 1
6
Read t Bytes: 1
7
r length: 18
8
This is an error!
9
Wrote 18 bytes to os.Stderr
10
$ go run str.go 2>/dev/null
11
r length 4
12
Read t Bytes: 1
13
Read e Bytes: 1
14
Read s Bytes: 1
15
Read t Bytes: 1
16
r length: 18
17
Wrote 18 bytes to os.Stderr
Copied!
Last modified 2yr ago
Copy link