接口

Read相关

Reader

Reader接口用于包装基本的读取方法。

type Reader interface {
//将数据读入到p中,直到读满p或者读取的过程中遇到错误,此时返回的n<len(p)同时err!=nil
//如果正常结束的话n也可能小于len(p),此时err==io.EOF(var EOF = errors.New("EOF"))
Read(p []byte) (n int, err error)
}

ReaderFrom

ReaderFrom实现从其他Reader读取数据

type ReaderFrom interface {
//从 r 中读取数据,直到 EOF 或发生错误。
//不会返回EOF错误
ReadFrom(r Reader) (n int64, err error)
}

ReaderAt

ReaderAt接口使得可以从指定偏移量处开始读取数据。

type ReaderAt interface {
//从基本输入源的偏移量 off 处开始,将 len(p) 个字节读取到 p 中。
//若一些数据可用但不到 len(p) 字节,ReadAt 就会阻塞直到所有数据都可用或产生一个错误。 在这一点上 ReadAt 不同于 Read。
//若 ReadAt 按查找偏移量从输入源读取,ReadAt 应当既不影响基本查找偏移量也不被它所影响。
ReadAt(p []byte, off int64) (n int, err error)
}

ByteReader/RuneReader

读取一个Byte或Rune。

type ByteReader interface {
ReadByte() (byte, error)
}
type RuneReader interface {
//读取单个UTF-8字符,返回其rune和该字符占用的字节数。
ReadRune() (r rune, size int, err error)
}

ByteScanner/RuneScanner

在ByteReader/RuneReader基础上增加了一个UnreadByte/UnreadRune方法,作用在于读取后回退一个,不能连续回退

type RuneScanner interface {
RuneReader
UnreadRune() error
}

Write相关

Writer

用于包装基本的写入方法。

type Writer interface {
//len(p) 字节数据从p写入底层的数据流
//返回写入的字节数(0 <= n <= len(p))和遇到的任何导致写入提取结束的错误
Write(p []byte) (n int, err error)
}

WriterTo

type WriterTo interface {
//将数据写入w直到没有数据可以写入或者遇到错误
//返回值n是写入的字节数,执行时遇到的任何错误也会被返回
WriteTo(w Writer) (n int64, err error)
}

WriterAt

type WriterAt interface {
//将p全部len(p)字节数据写入底层数据流的偏移量off位置
//WriteAt写入的对象是某个有偏移量的底层输出流
//WriteAt方法既不应影响底层的偏移量,也不应被底层的偏移量影响
WriteAt(p []byte, off int64) (n int, err error)
}

ByteWriter

type ByteWriter interface {
WriteByte(c byte) error
}

其他接口

Seeker

包装基本的移位方法,还有其与Reader、Writer接口结合的接口。

type Seeker interface {
//Seek方法设定下一次读写的位置
//偏移量为offset
//校准点由whence确定:0表示相对于文件起始;1表示相对于当前位置;2表示相对于文件结尾
Seek(offset int64, whence int) (int64, error)
}

Golang标准库——io-接口的更多相关文章

  1. Golang 标准库log的实现

      原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://gotaly.blog.51cto.com/8861157/1406905 前 ...

  2. golang 标准库间依赖的可视化展示

    简介 国庆看完 << Go 语言圣经 >>,总想做点什么,来加深下印象.以可视化的方式展示 golang 标准库之间的依赖,可能是一个比较好的切入点.做之前,简单搜了下相关的内 ...

  3. Golang 标准库提供的Log(一)

      原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://gotaly.blog.51cto.com/8861157/1405754 G ...

  4. golang标准库分析之net/rpc

    net/rpc是golang提供的一个实现rpc的标准库.

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

    1.C标准库的I/O缓冲区          UNIX的传统 是Everything is a file,键盘.显示器.串口.磁盘等设备在/dev 目录下都有一个特殊的设备文件与之对应,这些设备文件也 ...

  6. golang 标准库

    前言 不做文字搬运工,多做思路整理 就是为了能速览标准库,只整理我自己看过的...... 最好能看看英文的 标准库 fmt strconv string 跳转 golang知识库总结

  7. golang中的标准库IO操作

    参考链接 输入输出的底层原理 终端其实是一个文件,相关实例如下: os.Stdin:标准输入的文件实例,类型为*File os.Stdout:标准输出的文件实例,类型为*File os.Stderr: ...

  8. golang标准库 context的使用

    本文索引 问题引入 context包简介 示例 问题引入 goroutine为我们提供了轻量级的并发实现,作为golang最大的亮点之一更是备受推崇. goroutine的简单固然有利于我们的开发,但 ...

  9. Golang标准库——io-结构

    结构 LimitedReader 定义 限制从Reader中读取的字节数. type LimitedReader struct { R Reader // underlying reader N in ...

随机推荐

  1. swift 监测内存泄漏 MLeaksFinder

    使用MLeaksFinder检测项目内存泄露总结 https://www.cnblogs.com/ocarol/p/5288497.html

  2. [leetcode]28. Implement strStr()实现strStr()

    Implement strStr(). Return the index of the first occurrence of needle in haystack, or -1 if needle ...

  3. 带标签的循环语句、switch

    今天继续更新,控制流程的剩余部分内容,带标签的循环语句中的continue/break 的使用方法,以及switch关键字的使用方法.例1:带标签的continue/break.package com ...

  4. Python开发——【条件】语句

    单分支 # if 条件: # 满足条件后要执行的代码 if 2>1: print("2>1") 双分支 # if 条件: # 满足条件后要执行的代码 # else: # ...

  5. Node.js web发布到AWS ubuntu 之后,关闭Putty,Node 项目也随之关闭的解决办法

    最近公司把BlockChain和对应的Node Web都发布到了AWS 的ubuntu 系统上. 但是遇到了一个问题,每次启动 Node Web之后,关闭Putty,Node Web也随之关闭. 由于 ...

  6. 数据库mysql之慢查询优化

    今天项目遇到一个问题:就是在公司test环境中执行sql查询语句很快,也就几百毫秒,但是放到sit环境中测试就要延迟至少1分钟左右. 网上找了很多原因,大多数都是说索引问题,我看了索引没问题,又重新建 ...

  7. Linux环境部署项目引起Out of Memory Error: PermGen Space的解决方案

    1. 背景 前几天,在搭建项目时遇到到一些问题,现在整理记录一下. Linux环境:Red Hat Enterprise Linux Server release 6.4: # 查看命令cat /et ...

  8. shell脚本学习-printf命令

    跟着RUNOOB网站的教程学习的笔记 printf命令模仿C程序库里的printf()程序.printf由POSIX标准所定义,因此使用printf的脚本比使用echo有着更好的移植性. printf ...

  9. 01-jQuery的介绍

    1.为什么要使用jQuery 在用js写代码时,会遇到一些问题: window.onload 事件有事件覆盖的问题,因此只能写一个事件. 代码容错性差. 浏览器兼容性问题. 书写很繁琐,代码量多. 代 ...

  10. vue使用矢量图

    1.在阿里巴巴矢量图标下载下来 2.放到static下 3.main.js下 import '../static/iconfont/iconfont.css' 4.调用<i class=&quo ...