Go标准库之输入输出

输入输出在任何一门语言中都必须提供的一个功能。
算法的实现离不开特定的语言,而算法有五个特性:
有穷性,确切性,输入项,输出项,可行性
五项就占了两项,说明输入输出在编程中是及其重要的地位。

Go的输入和输出是有两个接口定义的。只要实现了两个接口,才能说明这个对象是可以进行输入输出操作的。

这两个接口是:io.Writerio.Reader


io.Writer

接口声明如下

type Writer interface {  
	Write(p []byte) (n   int, err error)
} 

这个接口声明了唯一一个方法Write,这个方法接受一个byte切片,并返回两个值。第一个值是写入的字节数,第二个值是error错误值。

实现这个接口的注意事项: Write方法的实现需要试图写入被传入的byte切片里的所有数据。但是,如果无法全部写入,那么该方法就一定会返回一个错误。返回的写入字节数可能会小于byte切片的长度,但不会出现大于的情况。最后,不管什么情况,都不能修改byte切片里的数据。


io.Reader
type Reader interface {
  	Read(p []byte) (n   int, err    error) 
} 

这个方法接受一个byte切片,并返回两个值。第一个值是读入的字节数,第二个值是error错误值。
实现这个接口的注意事项:
标准库里列出了实现Read方法的4条规则。
第一条规则表明,该实现需要试图读取数据来填满被传入的byte切片。允许出现读取的字节数小于byte切片的长度,并且如果在读取时已经读到数据但是数据不足以填满byte切片时,不应该等待新数据,而是要直接返回已读数据。
第二条规则提供了应该如何处理达到文件末尾(EOF)的情况的指导。当读到最后一个字节时,可以有两种选择。一种是Read返回最终读到的字节数,并且返回EOF作为错误值,另一种是返回最终读到的字节数,并返回nil作为错误值。在后一种情况下,下一次读取的时候,由于没有更多的数据可供读取,需要返回0作为读到的字节数,以及EOF作为错误值。
第三条规则是给调用Read的人的建议。任何时候Read返回了读取的字节数,都应该优先处理这些读取到的字节,再去检查EOF错误值或者其他错误值。
最终,第四条约束建议Read方法的实现永远不要返回0个读取字节的同时返回nil作为错误值。如果没有读到值,Read应该总是返回一个错误。

示例
import (
	"bytes"
	"fmt"
	"os"
)

func main() {
	var b bytes.Buffer

	b.Write([]byte("hello "))

	fmt.Fprint(&b, "world")

	b.WriteTo(os.Stdout)
}

输出:

hello world

参考文献:
《Go语言实战》

撩我?
搜索我的公众号:Kyda
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值