package term import ( "bytes" "sync" ) type NextWriter struct { b bytes.Buffer mu sync.Mutex } func (w *NextWriter) Write(p []byte) (int, error) { w.mu.Lock() defer w.mu.Unlock() return w.b.Write(p) } func (w *NextWriter) Read() ([]byte, int, error) { w.mu.Lock() defer w.mu.Unlock() p := w.b.Bytes() buf := make([]byte, len(p)) read, err := w.b.Read(buf) w.b.Reset() if err != nil { return nil, 0, err } return buf, read, err }