Golang io 包详解
I/O 包是 Go 语言标准库中非常重要的一部分,它提供了基本的输入、输出操作。以下是对 Go 语言中 I/O 包的一些常用函数和类型的解释和示例代码:
io.Reader
和io.Writer
接口:这是 I/O 包中最基本的两个接口。
io.Reader
接口定义了一个读取数据的方法,而io.Writer
接口定义了一个写入数据的方法。
package main
import (
"fmt"
"io"
"strings"
)
func main() {
r := strings.NewReader("Hello, Reader!")
b := make([]byte, 8)
for {
n, err := r.Read(b)
fmt.Printf("n = %v err = %v b = %v\n", n, err, b)
if err == io.EOF {
break
}
}
w := strings.NewReader("")
fmt.Fprintf(w, "Hello, Writer!")
fmt.Println(w.String())
}
io.ReadCloser
和io.WriteCloser
接口:这两个接口分别继承自
io.Reader
和io.Writer
,并增加了一个Close
方法用于关闭资源。
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.Open("test.txt")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
var reader io.ReadCloser = file
buf := make([]byte, 10)
n, err := reader.Read(buf)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(buf[:n]))
}
io.ReadAtLeast
和io.ReadFull
函数:这两个函数用于确保读取至少(
ReadAtLeast
)或读取完全(ReadFull
)指定数量的字节。
package main
import (
"fmt"
"io"
"strings"
)
func main() {
r := strings.NewReader("Hello, Readers!")
b := make([]byte, 3)
n, err := io.ReadAtLeast(r, b, 3)
fmt.Printf("n = %v err = %v b = %v\n", n, err, b)
r = strings.NewReader("Hello, Readers!")
b = make([]byte, 3)
n, err = io.ReadFull(r, b)
fmt.Printf("n = %v err = %v b = %v\n", n, err, b)
}
io.LimitReader
函数:这个函数用于创建一个读取器,它从另一个读取器中读取数据,但是限制每次调用
Read
方法最多读取的字节数。
package main
import (
"fmt"
"io"
"os"
)
func main() {
file, err := os.Open("test.txt")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
var reader io.Reader = file
reader = io.LimitReader(reader, 5)
buf := make([]byte, 10)
n, err := reader.Read(buf)
if err != nil {
fmt.Println(err)
return
}
fmt.
评论已关闭