golang标准库--io

一、type Reader interface {

    Read(p []byte)(n int, err error)

  }

  Reader是一个包含Read方法的接口

  Read方法读取len(p)个字节到p中。它返回读取到的字节数和遇到的错误。即使Read返回n<len(p),在调用过程中也会使用所有p作为暂存空间。如果一些可读取的数据没有len(p),按照惯例Read会返回读取到的数据,而不是等待更多。

  当Read成功读取n>0个字节后遇到一个错误或者end-of-file条件,它会返回读取到的字节数。它会从同样的调用中返回非空error或者从下次调用中返回错误并且n==0。这个通用案例的一个实例是:一个Reader在输入流的结尾返回非零字节数将会返回err==EOF或者err==nil。接下来的Read将会返回0,EOF。

  调用者总是应该在考虑错误之前先处理返回的n>0的字节,这样做能正确地处理发生在读取一些字节后和允许EOF行为这两者的I/O错误

  这个接口的Read实现不应该返回0字节和nil错误,除非len(p)==0。调用者应该视这种情况为什么都没有发生,特别注意这不代表读取结束。

  Read的实现一定不能返回p

二、

  

原文地址:https://www.cnblogs.com/DjanFey/p/12288410.html

时间: 2024-07-31 09:26:58

golang标准库--io的相关文章

golang 标准库io/ioutil,读取文件,生成临时目录/文件

1.读取目录 list, err := ioutil.ReadDir("DIR")//要读取的目录地址DIR,得到列表 if err != nil { fmt.Println("read dir error") return } for _, info := range list { //遍历目录下的内容,获取文件详情,同os.Stat(filename)获取的信息 info.Name()//文件名 info.Mode()//文件权限 info.Size()//文件

Golang中使用log(一):Golang 标准库提供的Log

Golang的标准库提供了log的机制,但是该模块的功能较为简单(看似简单,其实他有他的设计思路).不过比手写fmt. Printxxx还是强很多的.至少在输出的位置做了线程安全的保护.其官方手册见Golang log (天朝的墙大家懂的).这里给出一个简单使用的例子: package main import ( "log" ) func main(){ log.Fatal("Come with fatal,exit with 1 \n") } 编译运行后,会看到程

Golang标准库之Buffer

Buffer Go标准库Buffer是一个可变大小的字节缓冲区,可以用Wirte和Read方法操作它,在Go标准库中,定义了如下关于Buffer的数据结构. type Buffer struct { buf []byte // contents are the bytes buf[off : len(buf)] off int // read at &buf[off], write at &buf[len(buf)] runeBytes [utf8.UTFMax]byte // avoid

Golang中使用log(二):Golang 标准库log的实现

前一篇文章我们看到了Golang标准库中log模块的使用,那么它是如何实现的呢?下面我从log.Logger开始逐步分析其实现. 其源码可以参考官方地址 1.Logger结构 首先来看下类型Logger的定义: type Logger struct { mu sync.Mutex // ensures atomic writes; protects the following fields prefix string // prefix to write at beginning of each

golang标准库文档

Golang标准库文档 https://studygolang.com/pkgdoc go中文官网 https://go-zh.org/doc/ <Go Web 基础>是一套针对 Google 出品的 Go 语言的视频语音教程,主要面向完成 <Go 编程基础>有关 Go Web 开发的学习者. Unknwon/go-web-foundation <Go 编程基础>主要面向新手级别的学习者.Unknwon/go-fundamental-programming <Go

C 标准库IO缓冲区和内核缓冲区的区别

1.C标准库的I/O缓冲区 UNIX的传统 是Everything is a file,键盘.显示器.串口.磁盘等设备在/dev 目录下都有一个特殊的设备文件与之对应,这些设备文件也可以像普通文件(保存在磁盘上的文件)一样打开.读.写和关闭,使用的函数接口是相同的.用户程序调用C标准I/O库函数读写普通文件或设备,而这些库函数要通过系统调用把读写请求传给内核 ,最终由内核驱动磁盘或设备完成I/O操作.C标准库为每个打开的文件分配一个I/O缓冲区以加速读写操作,通过文件的FILE 结构体可以找到这

golang标准库-strings

字符串处理 字符串在开发中经常用到,包括用户的输入,数据库读取的数据等,我们经常需要对字符串进行分割.连接.转换等操作 字符串操作 下面这些函数来自于strings包,这里介绍一些我平常经常用到的函数,更详细的请参考官方的文档. 1.前缀和后缀 HasPrefix 判断字符串s是否以prefix开头: 函数签名 strings.HasPrefix(s, prefix string) bool HasSuffix 判断字符串 s 是否以 suffix 结尾: 函数签名 strings.HasSuf

golang 标准库 container/ring 及 container/heap

由于目前golang 没有提供泛型机制,所以通用容器实现基本和 c 类似,golang 用 interface{} 做转接, c 用 void * 转接. ring 包实现循环双向链表: type Ring struct   {        next, prev *Ring        Value      interface{}  } 内部导出一个用户可以操作的Value 字段. heap 包实现 binary heap : type Interface interface {      

golang标准库 context的使用

本文索引 问题引入 context包简介 示例 问题引入 goroutine为我们提供了轻量级的并发实现,作为golang最大的亮点之一更是备受推崇. goroutine的简单固然有利于我们的开发,但简单总是有代价的,考虑如下例子: func httpDo(req *http.Request, resp *http.Response) { for { select { case <-time.After(5 * time.Second): // 从req读取数据然后发送给resp // 其他的一