go io.Pipe 没有啥能说明白的类似就是一个通道写和读是一对一的。读取会阻塞只有等到写完后才可以读取。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 ..) }