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 关键字时,就表示你要创建一个新的协程,并让这个函数在这个协程中运行。
这样,主程序就不会等待这个函数执行完毕,而是继续执行下面的代码