Golang io.ReadFull()函数及其示例
在Go语言中,io包提供了基本的I/O原语接口,其主要工作是封装这些原语的正在实现。Go语言中的 ReadFull() 函数用于从指定的读取器“r”中读取并复制到指定的缓冲区“buf”,所复制的字节数正好等于所指定缓冲区的长度。此外,该函数是在io包下定义的。在使用这些函数之前,您需要导入“io”包。
语法:
func ReadFull(r Reader, buf []byte) (n int, err error)
在此,”r”是所述读取器,”buf”是指定长度的缓冲区。
返回值: 它返回所指定缓冲区复制的字节数,并在读取的字节数少于所指定缓冲区的长度时返回错误。在此处,如果错误为零,则”n”所返回的将等于所指定的缓冲区长度。但是,如果没有读取任何字节数,则返回的错误为“EOF”。
注意: 如果在读取了较少字节数但未读取所有字节的情况下发生EOF,则此方法将返回ErrUnexpectedEOF错误。但是,如果指定的阅读器在阅读至少长度的缓冲区后返回错误,则该错误将被拒绝。
示例1:
// Golang程序来演示
//io.ReadFull()函数的用法
//包含主要包
package main
//导入fmt,io和strings
import (
"fmt"
"io"
"strings"
)
//调用main
func main() {
//使用NewReader方法定义读取器
reader := strings.NewReader("Geeks")
//定义所指定长度的缓冲区
//使用make关键字
buffer := make([]byte, 4)
//调用ReadFull方法及其参数
n,err := io.ReadFull(reader,buffer)
//如果错误不为空,则进入恐慌模式
if err != nil {
panic(err)
}
//打印输出
fmt.Printf("缓冲区内的字节数: %d\n",n)
fmt.Printf("缓冲区内的内容: %s\n",buffer)
}
输出:
缓冲区内的字节数: 4
缓冲区内的内容: Geek
在此,值“n”返回i.e, 4等于’buf’的长度,因为错误为零。
示例2:
// Golang程序来演示
//io.ReadFull()函数的用法
//包含主要包
package main
//导入fmt,io和strings
import (
"fmt"
"io"
"strings"
)
//调用main
func main() {
//使用NewReader方法定义读取器
reader := strings.NewReader("Geeks")
//定义所指定长度的缓冲区
//使用make关键字
buffer := make([]byte, 6)
//调用ReadFull方法及其参数
n,err := io.ReadFull(reader,buffer)
//如果错误不为空,则进入恐慌模式
if err != nil {
panic(err)
}
//打印输出
fmt.Printf("缓冲区内的字节数: %d\n",n)
fmt.Printf("缓冲区内的内容: %s\n",buffer)
}
输出:
恐慌: 意外的EOF
goroutine 1 [running]:
main.main()
/tmp/sandbox503804944/prog.go:29 +0x210
在这里,上述代码中所示的缓冲区长度大于从读取器中读取的字节数,因此会抛出一个EOF错误。
极客教程