Go 语言的 io copy 代码举例

12 min read
package main

import (
    "fmt"
    "io"
    "log"
    "os"
)

func main() {
    r, w := io.Pipe() // 创建一个管道
    go func() {
        fmt.Fprint(w, "Hello there\n") // 写入管道的写入器
        w.Close() // 关闭写入器
    }()
    _, err := io.Copy(os.Stdout, r) // 从管道的读取器复制到标准输出
    if err != nil {
        log.Fatal(err)
    }
}

创建一个 go func() 的协程是为了避免 io copy 阻塞主程序的执行。

io copy 会一直复制数据,直到遇到错误或文件结束符(EOF)。

如果不使用协程,那么 io copy 就会占用主程序的资源,导致其他操作无法进行。

当你在一个函数前面加上 go 关键字时,就表示你要创建一个新的协程,并让这个函数在这个协程中运行。

这样,主程序就不会等待这个函数执行完毕,而是继续执行下面的代码