您好,欢迎访问一九零五行业门户网

golang read会阻塞么

go语言中reader接口定义了一个read操作,实现了reader接口的都有read这个函数。          (推荐学习:go)
接口的定义如下:
type reader interface { read(p []byte) (n int, err error)}
一次read调用最多读取len(p)字节的数据到缓冲区p中
n表示这一次实际读取到字节数,(0 f2255bdda6ae9a5dc18a3983ed6dc8f50)和err(非nil)
或者本次read操作返回n(>0)和nil,下一次调用的时候再返回0和err(非nil)
这两种操作都是可能的,所以调用者永远应该首先按照n>0来判定是否有数据返回,而不是先判定err是否为nil
举个例子说明,当某次调用到达文件末尾并且还读取到了n字节数据的时候,reader的实现可能有两种方式:
当前调用返回n和eof error
当前调用返回n和nil,下次调用返回0和eof
read的实现不应该返回0和nil,也就是当返回0的时候就应该返回一个非nil的error,除非缓冲空间的大小为0,然后调用者应该忽略调用0和nil这种返回值组合,当作什么都没发生,特别强调一下,这个返回并不表示eof了
以上就是golang read会阻塞么的详细内容。
其它类似信息

推荐信息