golang 中的 io包

中柠檬 · · 739 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

一些抽象化的接口

读相关

名称 作用 备注
Read 读接口 1
ReadCloser 读接口(包含 Close接口) 2
ReadSeeker 从哪里读到哪里 3
ReaderAt 从一定距离开始读 4
ReaderFrom 包含 ReadForm方法,读到Eof 或 error停止。返回读到的字节数 5

写相关

名称 作用 备注
Writer 读接口 1
WriteCloser 读接口(包含 Close接口) 2
WriteSeeker 从哪里读到哪里 3
WriterAt 从一定距离开始读 4
WriterTo 包含 WriterTo 方法,读到Eof 或 error停止。返回写入的字节数

 

几个函数方法

1. Copy (内部实现了 ReaderFrom 和 WriterTo 接口)

func Copy(dst Writer, src Reader) (written int64, err error)
// 将字符串变成 Reader
r := strings.NewReader("some io.Reader stream to be read\n")

if _, err := io.Copy(os.Stdout, r); err != nil {
    log.Fatal(err)
}

2. CopyBuffer

func CopyBuffer(dst Writer, src Reader, buf []byte) (written int64, err error)
r1 := strings.NewReader("first reader\n")
r2 := strings.NewReader("second reader\n")
buf := make([]byte, 8)

// buf is used here...
if _, err := io.CopyBuffer(os.Stdout, r1, buf); err != nil {
    log.Fatal(err)
}

// ... reused here also. No need to allocate an extra buffer.
if _, err := io.CopyBuffer(os.Stdout, r2, buf); err != nil {
    log.Fatal(err)
}

/* output:
first reader second reader
*/

3. ReadFull

func ReadFull(r Reader, buf []byte) (n int, err error)
r := strings.NewReader("some io.Reader stream to be read\n")

buf := make([]byte, 4)
if _, err := io.ReadFull(r, buf); err != nil {
    log.Fatal(err)
}
fmt.Printf("%s\n", buf)

// minimal read size bigger than io.Reader stream
longBuf := make([]byte, 64)
if _, err := io.ReadFull(r, longBuf); err != nil {
    fmt.Println("error:", err)
}

/*output:
some
error: unexpected EOF
*/

4. WriteString

func WriteString(w Writer, s string) (n int, err error)
io.WriteString(os.Stdout, "Hello World")
/*output:
Hello World
*/

 

本文来自:开源中国博客

感谢作者:中柠檬

查看原文:golang 中的 io包

入群交流(和以上内容无关):Go中文网 QQ 交流群:798786647 或加微信入微信群:274768166 备注:入群;关注公众号:Go语言中文网

739 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传