没有啥能说明白的,类似就是一个通道,写和读是一对一的。读取会阻塞,只有等到写完后才可以读取。
package main
import (
"bytes"
"fmt"
"io"
"log"
"time"
)
func main() {
log.Println("main ...")
reader, writer := io.Pipe()
// 开启一个线程来搞
go func() {
defer writer.Close()
for i := 0; i < 5; i++ {
_, err := writer.Write([]byte(fmt.Sprintf("message %d\n", i)))
if err != nil {
fmt.Println("Error writing to pipe:", err)
return
}
}
time.Sleep(1 * time.Second)
}()
buf := new(bytes.Buffer)
// 阻塞等待writer.Close()完成
_, err := buf.ReadFrom(reader)
//或者 _, err := io.Copy(buf, reader)
if err != nil && err != io.EOF {
fmt.Println("Error reading from pipe:", err)
return
}
// 输出读取到的数据
fmt.Println("Data read from pipe:", buf.String())
log.Println("success ..")
}